【发布时间】:2016-07-20 20:00:49
【问题描述】:
我正在尝试使用一些过滤器制作一个简单的搜索系统,其中一个过滤器是按“流行度”对它们进行排序,这基本上会将具有最多 cmets 的帖子放在最前面,而将 cmets 最少的帖子放在最后。 我有 2 个表,一个用于包含所有帖子(标题、内容、图像、postId)的帖子,另一个用于包含所有 cmets(内容和 postId(以验证评论来自哪个帖子)的 cmets。 我的查询看起来像:
$search = $db->prepare("SELECT comments.postId, comments.commentId, COUNT(comments.commentId) AS comms, posts.title, posts.postDate, posts.postId, posts.content,
FROM comments, posts, users
WHERE comments.postId = posts.postId AND posts.content LIKE ? OR posts.title LIKE ?
GROUP BY comments.commentId
ORDER BY comms DESC
LIMIT 100");
$search->execute(array("%$q%", "%$q%"));
显示我使用的搜索结果:
foreach($search as $s) {
?>
<a href="stream.php?viewPost=<?php echo $s['postId'];?>">
<h5>
<?php echo $s['title']; ?>
</h5>
</a>
<small>Posted on <?php echo $s['postDate']; ?> </small>
<div class="divider"></div>
<?php
}
?>
但是当我搜索某些内容时,它不是首先显示具有最多 cmets 的帖子,而是显示 1 个帖子(实际上具有最多 cmets)。它将一遍又一遍地显示该帖子。 如果我删除
GROUP BY comments.commentId
从查询中它只会显示该帖子一次。
如果有人能告诉我我在这里做错了什么,因为我真的没有看到。
【问题讨论】: