如何加入到表中的最新记录?
-
22-08-2019 - |
题
我需要做的是简单...但它的上午03点和Im大概俯瞰明显。
林编码一个简单的论坛。一个表存储论坛标题,描述等,而其他商店的职位。在论坛列表中,显示所有论坛的名单,我要抢在每个论坛最新帖子,并显示文章标题,海报和帖子ID,和日期。简单。
唯一的问题是,当我加盟的职位表,它加入到表中的第一条记录,而不是最后,这表示在该论坛上一个帖子。
下面是获取论坛+数据的列表为“最新”职位的简化查询(现在用作“第一交”)。
SELECT forum_title, forum_id, post_subject, post_user, post_id, post_date FROM board_forums
LEFT JOIN board_posts
ON (forum_id = post_parentforum AND post_parentpost = 0)
WHERE forum_status = 1
GROUP BY forum_id
ORDER BY forum_position
我怎样才能解决这个问题?
解决方案
你打的问题是经典的暧昧GROUP BY 的问题。这是特殊到MySQL,因为其他RDBMS(和标准SQL)将不会允许您的查询的。您所查询的失败,单值规则,因为你没有在GROUP BY
列出的所有非聚合列。
下面是展示我最喜欢的,每组获取最大的排的方式加以解决:
SELECT f.forum_title, f.forum_id, p1.post_subject, p1.post_user,
p1.post_id, p1.post_date
FROM board_forums f
LEFT JOIN board_posts p1
ON (f.forum_id = p1.post_parentforum AND p1.post_parentpost = 0)
LEFT JOIN board_posts p2
ON (f.forum_id = p2.post_parentforum AND p2.post_parentpost = 0
AND p1.post_id < p2.post_id)
WHERE p2.post_id IS NULL AND f.forum_status = 1
ORDER BY f.forum_position;
如果p2.post_id IS NULL
,这意味着没有交在p2
这比在p1
发现后更大的发现。
人体工程学,p1
是最新的柱(假设post_id
是自动递增)。
重新评论:
轻微问题与此有关。 POST_ID具有最高ID不一定是最新的讯息。
没有问题。只需使用这是保证从后面的文章区分先前的帖子列。你提到post_date
。在领带的情况下,你必须打破与另一列的关系(或列),这将是确保按时间顺序排列。
LEFT JOIN board_posts p2
ON (f.forum_id = p2.post_parentforum AND p2.post_parentpost = 0
AND (p1.post_date < p2.post_date
OR p1.post_date = p2.post_date AND p1.post_millisecond < p2.post_millisecond))
不隶属于 StackOverflow