Jak wyświetlić ilość osób lubiących posty ?

0

Cześć!. Mam kod wyświetlający posty dodane przez użytkownika. Post składa się z nazwiska, czasu dodania, treści postu oraz 4 przycisków. Problem polega na tym że chcę obok każdego przycisku wyświetlić ilość osób lubiących tego posta. Wiem że muszę stworzyć nową funkcję do tego, tylko nie wiem jak mam to wyświetlić, bo posty są wyświetlane za pomocą pętli foreach, więc tworząc nową funkcję musiałbym bym też dać foreach aby wyświetlić ale wtedy prawdopodobnie by to nie działało. Ma moze ktoś jakieś pomysły jak to zrobić ?

 <?php foreach ($tweet->userData as $user) { ?>
            <div class='col-xl-8'>
                <div class='row'>
                    <div class='btn-block d-flex justify-content-between'>
                        <div>
                           <?php  echo $user['autor']   ?>
                            </div>
                        <div>
                           <?php echo $user['date_to_add'] ?>
                            </div>
                        </div>
                    </div>
                <?php echo $user['comment'] ?>
                <form action='' method='post'>
                    <div class='row'>
                        <div class='col-12 col-xl-12 d-flex justify-content-between'>
                            <button class='button2' name='dodaj_like'><i class='fas fa-heart'></i><input type='hidden' name='like' value="<?php echo $user['id']?>" />Cool</button>
                            <button class='button2' name='dodaj_dislike'><i class='fas fa-heart-broken'></i><input type='hidden' name='dislike' value="<?php echo $user['id']?>"/>Awful</button>
                            <button class='button2' name='dodaj_comment' ><i class='far fa-comment-dots'></i><input type='hidden' name='comment' value="<?php echo $user['id']?>"/>Comment</button>
                            <button class='button2' name='dodaj_share'><i class='far fa-share-square'></i><input type='hidden' name='share' value="<?php echo $user['id']?>"/>Share</button>
                            </div>
                        </div>
 public function display()
    {
        $field5 = $_GET['id'];
        $sql = $this->database->connect()->prepare("SELECT post.id, CONCAT(first_name,' ', last_name) AS autor, comment, date_to_add FROM user JOIN post ON user.id = post.user_id where user_id = :user_id group by post.id DESC");
        $sql->bindParam(':user_id',$field5, PDO::PARAM_INT);
        $sql->execute();

            if($sql->rowCount())
            {
                $this->userData = [];

                while ($row = $sql->fetch())
                {
                    $this->userData[] = $row;
                }
            }
        }
0

W pętli gdzie wyciągasz posty musisz dopisać mechanizm który będzie zliczał polubienia dla danego posta. Potem zostanie ci tylko wyświetlić dodatkowe dane na froncie.

0

A gdzie składujesz polubienia postów?

Jeśli w tabeli z postami jako kolumna liczbowa - to po prostu uwzględniasz tę kolumnę w zapytaniu SELECT.

Jeśli w innej tabeli (np. post_likes), to robisz joina
Tu też zależy od struktury tabeli z lajkami, tj.

  • czy ma ona strukturę post_id + post_likes_count (liczba like'ów składowana w jednym wierszu) - wtedy wystarczy prosty join i dodanie kolumny do pobieranych
  • czy każdy like jest składowany osobno - wtedy używasz funkcji COUNT() i pobierasz liczbę wierszy z lajkami dla każdego posta

No chyba że za lajki odpowiada FB - tu nie pomogę.

1

Moze sie jeszcze komus przyda (z palca, ale wyglada ok):

(bt) likes | id | id_post | id_liker |
(st1) posts | id | id_author | content |
(st1_1, st2) users | id | surname |

SELECT st1.id_author, st1_1.surname, bt.id_post, st1.content, COUNT(*)
FROM likes as bt 
    INNER JOIN posts st1 ON bt.id_post = st1.id
        INNER JOIN users st1_1 ON st1.id_author = st1_1.id
    INNER JOIN users st2 ON bt.id_liker = st2.id
WHERE st1.id_author = 1
GROUP BY bt.id_post
id_author surname id_post content COUNT(*)
1 Nowak 3 3 - content 2
1 Nowak 7 7 - content 4

1 użytkowników online, w tym zalogowanych: 0, gości: 1