您知道Facebook主页Feed如何列出所有最近的帖子吗?它显示发布的用户,他们的实际帖子,然后是该帖子附带的前几条评论。这就是我想要实现的目标,但我很难构建一个可以收集所有数据的查询。
我有3个表:用途,帖子和评论。每个都有一个唯一的ID,但它们引用彼此的ID。即,“注释”表包含已发布用户的user_id列以及所附帖子的post_id。
我正在查询SQL以收集所有帖子。我加入了我的用户和评论表,以了解海报的用户名以及帖子总共有多少评论,如下所示:
$query = "
SELECT `posts`.`id`,`posts`.`message`,`posts`.`link`,
`posts`.`posted`,`posts`.`category`,`posts`.`user_id`,
`users`.`username`,
count(`comments`.`id`)
FROM `posts`
INNER JOIN `users`
ON `posts`.`user_id`=`users`.`id`
JOIN `comments`
ON `comments`.`post_id`=`posts`.`id`
WHERE `posts`.`group_id` = '$id'
AND `posts`.`category`='$filter'
GROUP BY `posts`.`id`
ORDER BY `posts`.`posted`
DESC
";
但我没有找到帖子中有多少评论,而是想阅读前几篇文章。有没有人能想到只用一个查询来实现这个目标的方法?
答案 0 :(得分:0)
您可以将LIMIT
子句用于“第一”帖子。通过将“第一个帖子”作为子查询然后加入评论,您可以在一个查询中获取所有内容。如果没有评论的帖子,评论应该保持联系。
注意:
此查询未经测试,但应该关闭。
这将获得前几个帖子的所有评论,因此您需要使用前端显示代码限制“每篇帖子最多3条评论”的显示。< / p>
可以使用变量将此查询中的每个帖子的评论限制为3个,但这不是我知道该怎么做的。
以下是查询:
SELECT
FirstPosts.id,
FirstPosts.message,
FirstPosts.link,
FirstPosts.posted,
FirstPosts.posts,
FirstPosts.user_id,
FirstPosts.username,
comments.<< your comment column >>
FROM (
SELECT `posts`.`id`,`posts`.`message`,`posts`.`link`,
`posts`.`posted`,`posts`.`category`,`posts`.`user_id`,
`users`.`username`
FROM `posts`
INNER JOIN `users`
ON `posts`.`user_id`=`users`.`id`
WHERE `posts`.`group_id` = '$id'
AND `posts`.`category`='$filter'
ORDER BY `posts`.`posted` DESC
LIMIT 20) FirstPosts
LEFT JOIN comments ON FirstPosts.id = comments.post_id
ORDER BY FirstPosts.Posted, comments.<< column you use to determing comment order >>
如果您按日期或顺序确定评论顺序,则必须ORDER BY FirstPosts.Posted, comments.whatever DESC
。
希望这有帮助!