gpt4 book ai didi

mysql - 过去一小时的两个左连接和记录

转载 作者:行者123 更新时间:2023-11-29 22:33:12 25 4
gpt4 key购买 nike

SELECT p.*, 
u.user_id,
u.user_name,
count(c.comment_post_id) AS comments,
c.comment_added
FROM posts as p
LEFT JOIN comments as c
ON (p.post_id=c.comment_post_id)
LEFT JOIN users as u
ON (p.postedby_id = u.user_id)
GROUP BY p.post_id
HAVING c.comment_added > NOW() - INTERVAL 1 HOUR
ORDER BY comments DESC

我不太擅长 mysql,但经过一些研究后我设法写了这个。

这里应该发生的是一个帖子列表,按过去一小时内评论最多的帖子排序。我的 noobscript 应该能够解释数据库结构的重要部分。某些选定的项目用于 php 目的。

我的脚本有什么问题?

最佳答案

由于您的帖子 -> 评论是一对多关系,因此您的结果集中不能有来自 comments 的字段并期望按 posts 进行分组。删除 c.comment_added,我想您会得到您期望的结果。

此外,将您的 HAVING 内容移至 WHERE 子句中。 HAVING 是在聚合后确定的,但由于上述原因,您不希望 comments_added 出现在聚合中。更准确地说,您希望在聚合之前过滤 comments 表,这就是 WHERE 将会执行的操作。

SELECT p.*,
u.user_id,
u.user_name,
count(c.comment_post_id) AS comments
FROM posts AS p
LEFT JOIN comments AS c
ON (p.post_id = c.comment_post_id)
LEFT JOIN users AS u
ON (p.postedby_id = u.user_id)
WHERE c.comment_added > NOW() - INTERVAL 1 HOUR
GROUP BY p.post_id
ORDER BY count(c.comment_post_id) DESC

关于mysql - 过去一小时的两个左连接和记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29658197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com