フォーラム Web サイトのコーディングを試みており、スレッドのリストを表示したいと考えています。各スレッドには、最初の投稿 (スレッドの「ヘッド」) と最後の投稿に関する情報を添付する必要があります。私の現在のデータベース構造は次のとおりです。
threads table:
id - int, PK, not NULL, auto-increment
name - varchar(255)
posts table:
id - int, PK, not NULL, auto-increment
thread_id - FK for threads
テーブルには他のフィールドもありますが、クエリには関係ありません。私は、単一のクエリ (サブクエリなし) で各スレッドの最初と最後の投稿の両方を取得するように、クエリthreads
を実行して何らかのJOIN
方法で処理することに興味があります。posts
これまでのところ、複数のクエリを使用してそれを行うことができ、最初の投稿を次のように定義しました。
SELECT *
FROM threads t
LEFT JOIN posts p ON t.id = p.thread_id
ORDER BY p.id
LIMIT 0, 1
最後の投稿は、を除いてほとんど同じですORDER BY id DESC
。これで、次のようにして、最初または最後の投稿で複数のスレッドを選択できました。
SELECT *
FROM threads t
LEFT JOIN posts p ON t.id = p.thread_id
ORDER BY p.id
GROUP BY t.id
ASC
しかしもちろん、両方を同時にソートする必要があるため、両方を同時に取得することはできませんDESC
。
ここでの解決策は何ですか?単一のクエリを使用することさえ可能ですか? これを容易にするためにテーブルの構造を変更する方法はありますか? これが不可能な場合、この特定の状況でクエリのパフォーマンスを向上させるためのヒントを教えてください。