2017-07-31 7 views
0

私は '投稿'と 'コメント'テーブルを持っています。選択したい最後の3ポストその投稿のすべてのコメント。私は現在、2つの別個のステートメントを使用しています:LEFT結合のLIMIT行

SELECT p.* FROM post p ORDER BY p.date DESC LIMIT 3; // called 1 
SELECT c.* FROM comment c WHERE c.post_id = :id; // called 3x time for each post. 

このクエリを1つにマージすることは可能ですか?

答えて

3

あなたはポストのセットのためにサブクエリを使用することができます。

SELECT p.* 
FROM (SELECT p.* 
     FROM post p 
     ORDER BY p.date DESC 
     LIMIT 3 
    ) p JOIN 
    comment c 
    ON c.post_id = p.id 
ORDER BY p.id, c.id; 
+0

作品を試すことができます。 –

1
SELECT POST .*, COMMENT.* 
from POST INNER JOIN COMMENT ON POST.id = COMMENT.post_id 
where POST.id = COMMENT.post_id ORDER BY POST.id LIMIT 3 
+0

これは動作しません。どんなものでも、私たちは常に3つのレコードしか得ていません。 –

1

はまた、何の問題もなく、この

SELECT p . * , c . * 
FROM post p 
LEFT JOIN 
COMMENT c ON c.post_id = p.id 
where p.id IN (SELECT id from post order by date desc limit 3) ORDER BY p.date 
+0

作品。あなたのコードは私にSQLエラー(1235)をもたらします:このバージョンのMySQLはまだ 'LIMIT&IN/ALL/ANY/SOMEサブクエリ'をサポートしていません。しかし、少しの検索:https://stackoverflow.com/questions/17892762/mysql-this-version-of-mysql-doesnt-yet-support-limit-in-all-any-some-subquと問題はなくなりました。完璧に動作します。 –

関連する問題