フォーラム スレッドの最新の投稿のリストを取得するための SQL を作成しようとしています。次のコードがあります。
SELECT
item_discuss_thread_id
, item_discuss_post_title
, COUNT(item_discuss_thread_id) AS nb_posts
FROM
item_discuss_posts
GROUP BY
item_discuss_thread_id
明らかに、これは投稿が最新かどうかを考慮せずにグループ化されます。item_discuss_post_title
グループの最初の行だけを取得します。
これを回避する方法があるのだろうか?そうでない場合、問題を解決する最善の方法は何ですか...サブクエリのみですか?
ありがとう、パベル
更新: すべてのスレッドが必要であることに注意してください。LIMIT 1 は問題を解決していません。また、GROUP BY はグループから最初のレコードを選択するため、ORDER BY はオプションではありません。これは、見かけほど単純な質問ではありません。
アップデート:
私は本当にサブクエリの使用を避けたいと思っています。そうする場合は、最適な方法で使用してください。私が現在持っているものは次のようなものです:
SELECT
ordered_by_date.item_discuss_thread_id
, item_discuss_post_title
, COUNT(item_discuss_thread_id) AS nb_posts
FROM
(
SELECT
item_discuss_thread_id
, item_discuss_post_title
FROM
item_discuss_posts
ORDER BY
item_discuss_post_datetime DESC
) AS ordered_by_date
GROUP BY
item_discuss_thread_id
EXPLAIN EXTENDED の結果は次のとおりです。
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, PRIMARY, <derived2>, ALL, \N, \N, \N, \N, 20, Using temporary; Using filesort
2, DERIVED, item_discuss_posts, index, \N, item_discuss_post_datetime, 8, \N, 20,