如何显示喜欢帖子的人数?

时间:2021-04-21 19:41:30

标签: php mysql

我有一个代码可以显示用户添加的帖子。帖子由名称、添加时间、帖子内容和4个按钮组成。问题是我想在每个按钮旁边显示喜欢和不喜欢这篇文章的人数。我知道我必须为此创建一个新函数,但我不知道如何显示它,因为帖子是使用 foreach 循环显示的,所以如果我要创建一个新函数,我将不得不给 foreach 显示,但那可能就行不通了。有没有人对如何做到这一点有任何想法?

    public function colors()
    {
        $id = $_SESSION['id'];
        $like = $this->data['like'];
        $sql = $this->database->connect()->prepare("SELECT * FROM user JOIN post ON user.id = post.user_id JOIN post_like ON post.id = post_like.post_id where post.user_id = :user_id and post_id = :post_id group by post.id DESC");
        $sql->bindParam(':user_id', $id, PDO::PARAM_INT);
        $sql->bindParam(':post_id', $like, PDO::PARAM_INT);
        $sql->execute();

        if ($sql->rowCount()) {
            return "yellow";
        } else
            return "red";
    }
}

<?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' style="background-color: <?php echo $color ?>" 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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

加入获得喜欢和不喜欢计数的子查询。

SELECT post.id, CONCAT(first_name,' ', last_name) AS autor, comment, date_to_add, IFNULL(like_count, 0) AS like_count, IFNULL(dislike_count, 0) AS dislike_count
FROM user 
JOIN post ON user.id = post.user_id 
LEFT JOIN (
    SELECT post_id, COUNT(*) AS like_count
    FROM post_like
    GROUP BY post_id
) AS l ON l.post_id on post.id
LEFT JOIN (
    SELECT post_id, COUNT(*) AS dislike_count
    FROM post_dislike
    GROUP BY post_id
) AS d ON d.post_id on post.id
where user_id = :user_id group by post.id DESC
相关问题