派生テーブル (MySQL の最新バージョン) を使用して、他のテーブルからカウントとデータをメインの結果セットに取得しています。LEFT OUTER JOIN の小さなクエリの 1 つが問題を引き起こしています。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 を削除すると問題なく動作しますが、最新の日付だけでなく、すべてのコメントの日付が返されるのではないかと心配しているため、DB が大きくなると問題が発生します。
ここで何が起こっているのですか?LIMIT 1 が last_comment の日付を返さないことがあるのはなぜですか? 私のクエリは、LIMIT 条件なしで、すべてのコメント日付を返しますか? 説明/提案は素晴らしいでしょう。