php - 如何显示点赞帖子的人数?
问题描述
我有一个显示用户添加的帖子的代码。帖子由名称、添加时间、帖子内容和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;
}
}
}
解决方案
加入获得喜欢和不喜欢计数的子查询。
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
推荐阅读
- google-apps-script - Google 表格脚本中的单元格引用
- testing - 为分子准备步骤调用另一个目录中的角色
- lib2gitsharp - LibGit2Sharp,打开的文件太多,和 GC
- c++ - Why template argument deduction doesn't work in C++?
- c# - 如何使用计时器安排按需调用方法?
- python - 在 Pygame 中用图像替换矩形
- node.js - 获取网络错误 413 Request Entity Too Large 事件,大小限制设置为 50mb 并正确有效负载大小
- python - 在 python 中使用用户输入创建一个数组
- autosys - 如何在特定时间段内每 30 分钟安排一次作业
- java - 我的问题是当我按下清除按钮时,它只是清除文本字段而不是之前按下的数字的数据