私は小さなフォーラムを作成しています。
クエリを実行しようとするとSElECT... JOIN...
、個々の投稿に関する情報と最後の返信 (ある場合) が取得されます。すべてを難しい方法で行いたいという私の願望の一環として、これには 5 つの表が含まれます (この問題に関連する列のみが記載されています)。
コメント情報参照 ID | 参照タイプ | 著者ID | 作成 投稿 ID | 題名 postitInfo リファレンスPostitID | 作成 | 著者ID ユーザー ID | ユーザー名 | 許可 userInfo リファレンスUserID | 題名
そこで、このクエリSELECT... JOIN...
クエリを実行して、最新のトピックとその最新の返信を取得します。
SELECT DISTINCT
t1.id, t1.title, t2.create, t2.lastEdit, t2.authorID, t3.username,
t4.title AS userTitle, t3.permission, t5.create AS commentCreate,
t5.authorID AS commentAuthor, t6.username AS commentUsername,
t6.permission AS commentPermission
FROM rantPostit AS t1
LEFT JOIN (rantPostitInfo AS t2)
ON ( t1.id = t2.referencePostitID)
LEFT OUTER JOIN (rantUser as t3, rantUserInfo as t4)
ON (t2.authorId = t3.id AND t4.referenceUserId = t2.authorId)
LEFT OUTER JOIN (rantCommentInfo as t5, rantUser as t6)
ON (t5.referenceType = 8 AND t5.referenceID = t1.id AND t6.id = t5.authorID)
ORDER BY t2.create DESC, t5.create DESC
これで、トピックの投稿が返されます。2つ持っているとしましょう。両方とも正常に返されます。最初の返信に対して 8 つの返信があるとします。9 つのエントリが返されます (トピック + 返信に 1 つずつ、返信のない個々のエントリ)。だから、私の問題はこれだと思います.最後のLEFT OUTER JOIN
節の返品の数を最新のものだけに制限するために何をすべきかわかりません。
(はい、ORDER BY...
最初に投稿の作成日、次にコメントの作成日で順序付けされるため、句がめちゃくちゃになっていることに気付きました。はい、2つのフィールドをpostitInfo、lastCommentCreate、およびlastCommentCreateID を作成し、返信があるたびに更新するようにしますが、難しい方法が好きです。)
それで、私は何を間違っていますか?
それとも、私が薪小屋を回ってハンマーで叩かなければならないほど馬鹿げた問題なのでしょうか?