我正在使用派生表(最新版本的 MySQL)从其他表中获取计数和数据,并将其放入我的主要结果集中。LEFT OUTER JOIN 中的一个小查询给我带来了问题。我正在尝试使用 LIMIT 1 条件获取该博客成员发表最新评论的日期。下面的整个查询获取会员的帐户详细信息和活动/登录统计信息。
SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname,
mem.email, mem.add1, mem.add2, mem.town, mem.county,
mem.post_code, mem.country_code, mem.country_name, mem.joined, mem.member_status,
IFNULL(rep.rep,0) as reputation,
IFNULL(com.cnt,0) as comments,
com1.lcomm as last_comment
FROM members AS mem
LEFT OUTER JOIN (
SELECT member_id, SUM(awarded_what) as rep
FROM members_reputation
GROUP BY member_id) rep
ON mem.member_id = rep.member_id
LEFT OUTER JOIN (
SELECT member_id, COUNT(comment_id) as cnt
FROM blog_comments
GROUP BY member_id) com
ON mem.member_id = com.member_id
LEFT OUTER JOIN (
SELECT member_id, posted as lcomm
FROM blog_comments
ORDER BY posted DESC LIMIT 1) com1 **** problem with LIMIT
ON mem.member_id = com1.member_id
// more left outer join sub queries to other tables
WHERE mem.member_id = 1
GROUP BY mem.member_id
我将查询标记为问题的地方就是问题所在。如果我使用ORDER BY posted DESC LIMIT 1
,即使该成员有 4 条评论,它有时也不会返回 last_comment 日期,但有时会返回 - 不确定模式。如果我删除 LIMIT 1 它可以正常工作,但我担心它会返回所有评论日期,而不仅仅是最新日期,这会在数据库增长时导致我出现问题。
这里发生了什么?为什么 LIMIT 1 有时不返回 last_comment 日期?我的查询是否在没有 LIMIT 条件的情况下返回所有评论日期?解释/建议会很棒。