私はこれに苦労しています.スタックオーバーフローに似たような質問がいくつかありますが、正しい解決策が見つかりません. 私は 3 つのテーブルを持っています:categories, topics
そしてposts
、それらを結合して、各カテゴリを、何かが投稿されcategories
た最新のトピックの件名と一緒に表示したい場所topics
と、最後に投稿がposts
テーブルから投稿された最新の日付を表示します。
各カテゴリから最新の投稿レコードを取得できないことを除いて、すべてを希望どおりに表示することに成功しました。
クエリは次のとおりです。
SELECT c.cat_id, c.cat_name, c.cat_description, t.topic_subject, t.topic_id, p.post_date FROM categories c
LEFT JOIN topics t ON c.cat_id = t.topic_cat
LEFT JOIN posts p ON p.post_topic = t.topic_id AND p.post_date = ( SELECT MAX(post_date) as post_date FROM posts WHERE post_topic = t.topic_id )
GROUP BY c.cat_id ORDER BY UNIX_TIMESTAMP(post_date) DESC
topic_id
句の中のWHERE
が探しているものではないということと関係があるはずだと思います。このような別のもの:
SELECT c.cat_id, c.cat_name, c.cat_description, t.topic_subject, t.topic_id, p.post_date FROM categories c
LEFT JOIN topics t ON c.cat_id = t.topic_cat AND t.topic_id = ( SELECT post_topic FROM posts ORDER BY UNIX_TIMESTAMP(post_date) DESC LIMIT 1 )
LEFT JOIN posts p ON p.post_topic = t.topic_id AND p.post_date = ( SELECT MAX(post_date) as post_date FROM posts WHERE post_topic = t.topic_id )
GROUP BY c.cat_id ORDER BY UNIX_TIMESTAMP(post_date) DESC
明らかに、最新の投稿全体が含まれるカテゴリの適切な投稿のみが表示されます。すべてのカテゴリの最新の投稿を取得するにはどうすればよいですか?