私は小さなフォーラムを作成しています。MySQLのクエリ、結合、および自分自身、または私がいつも苦労する方法
SElECT... JOIN...
クエリを実行しようとすると、個々の投稿の情報と最後の返信(もしあれば)が表示されます。苦労してすべてを行うために、私の欲望の一環として、これは5つのテーブル(この問題へのrevelant列のみが記載されている)
commentInfo referenceID | referenceType | authorID | create postit id | title postitInfo referencePostitID | create | authorID user id | username | permission userInfo referenceUserID | title
そうをカバーして、私は最新の話題を取得するには、このクエリ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つ、返答のない場合は1つ)。だから私は私の問題はこれだと思う:最後のLEFT OUTER JOIN
句のリターンの数をちょうど最近のものに制限するか、または最も新しいものだけをウィンドウの外に打つべきかわからない。
(はい、ORDER BY...
の句がうまくいきません。投稿日時、コメント作成日時順に並べ替えることができます。はい、2つのフィールドを追加することですべての問題を簡略化できますpostitInfo、lastCommentCreate、lastCommentCreateIDに入力して返信するたびに更新されますが...難しいのが好きです。)
どうしたのですか?
これは、私が薪で丸めてハンマーで叩いてしまうような、まったく問題がないのでしょうか?
これはあなたにトップ1のコメントを与えますが、彼はトップ5を探していますか? – Andomar
いいえ、私は一番上のものが必要です。私はそれを可能にするために5つのテーブルを使用しています(しかし、彼と一緒に、私は彼のプレゼントは2つですが、わずか3で試してみます。)LEFT OUTER JOINを作成日時に追加するのはあまり難しくない –
@Nikolai Echternacht: P – Andomar