フォーラムをコード化したいと思います。サブフォーラムの概要を作成して、HTMLテーブルのスレッドの最新投稿を表示する必要があります。複数のスレッドとその最新の投稿を1つのクエリを使ってデータベースから取得する
Iは、2つのMySQLテーブルを有する:
forum_threads:
のID INT(10)
forumidはint(10)
表題VARCHAR(80)
ACCESSLEVEL整数(2)
をロックされたenum( 'yes'、 'no')
forum_post:
ID int型(10)
スレッドIDはint(10)
ユーザーID int型(10)
投稿日時
編集した日時
メッセージテキスト
私のクエリは、次のようになります。
SELECT * FROM `forum_threads` LEFT JOIN `forum_post`
ON (forum_post.threadid = forum_threads.id)
WHERE forumid='$secfid'
AND accesslevel<='$secuserlevel'
ORDER BY forum_post.posted DESC
LIMIT $qStart,$ppp
ここで、$ secfidはサブフォーラムのIDです。
私の問題は、結果セットにはすべての投稿が含まれているということです。そのため、各スレッドは、投稿数と同じ回数だけ含まれています。 各スレッドは、その結果行に最新のポストが1回だけ存在する必要があります。
私は追加のサブクエリでそれを解決できましたが、もっと良い方法があるかどうか尋ねたいと思っていました。
また、私はstackoverflowの上でこのようなものが見つかりました:これは、すべての必要な情報を返すだけで、最新のポストとのスレッドから
SELECT * FROM `forum_post` fp
JOIN `forum_threads` ft
ON (fp.threadid = ft.id) WHERE forumid=1
AND accesslevel<='100'
AND NOT EXISTS (
SELECT * FROM forum_post fp2
JOIN forum_threads ft2
ON fp2.threadid = ft2.id
WHERE ft.forumid = ft2.forumid
AND fp.posted < fp2.posted
) LIMIT 0,20
を。
ありがとう!これは私が望むものに非常に近いです。 #1054 - MAX()を使用しているときに、 'on clause'に未知の列 'latest_post.posted'があります。 – Kazuo
Ups、エイリアスをMAX()関数に追加するのを忘れました。 subselectに 'MAX(post.posted)as posted'が追加されたので、今すぐOKでなければなりません。 – Pat