1

PHPとMySQLのスキルの一種のセルフテストとして、非常に単純なフォーラムソフトウェアを構築していますが、このタスクを実行する方法がよくわかりません。Threadsすべてのスレッドのリストを含むというテーブルがあります。Postsまた、すべての投稿を含む、というテーブルがあります。各テーブルの主キーは自動インクリメントIDです。の各行にPostsは、それが属するスレッドのIDも含まれています。

次のようなクエリを使用して、特定のサブフォーラム内のすべてのスレッドを簡単に取得できます。

SELECT * FROM Threads WHERE ForumID='$forumid'

...各スレッドからの最新の投稿に基づいてそれを並べ替える方法がわかりません。次のような任意のスレッドの投稿を取得できます。

SELECT * FROM Posts WHERE ThreadID='$threadid'

...しかし、そのデータを最初のクエリに組み込んで並べ替える方法がわかりません。各投稿には一意のIDがあるため、IDが高い投稿は常に最新のものになり、日付などを比較する必要はありません。実際にクエリを実行する方法がわかりません。

これはMySQLだけで可能だと確信していますが、そうでない場合、最も効率的なPHPソリューションは何でしょうか。ありがとう!

4

4 に答える 4

2

これを試してみてくださいINNER JOIN

SELECT p.*,t.*
FROM Threads t 
INNER JOIN Posts p ON t.id = p.ThreadID
ORDER BY
//whatever column you want like this p.date
p.date
DESC
于 2012-06-05T07:14:52.507 に答える
1

このようなThomethingはあなたを助けることができます

SELECT DISTINCT t.* FROM Posts p LEFT JOIN Threads t ON p.ThreadID = t.id ORDER BY p.last_modified_time DESC

または

SELECT DISTINCT t.* FROM Posts p LEFT JOIN Threads t ON p.ThreadID = t.id ORDER BY p.id DESC
于 2012-06-05T06:27:31.080 に答える
1

単純なJOINステートメントが解決策です。

SELECT *
FROM Threads t
JOIN Posts p ON t.ThreadID = p.ThreadID
ORDER BY t.ModificationDate DESC -- or whatever column you want

これにより、すべてのスレッドで最新の投稿が提供されます。

于 2012-06-05T06:35:48.690 に答える
0

与えられた答えはすべて非常に近いものでしたが、私は次のクエリを使用することになりました。

SELECT t.*
FROM Threads t
INNER JOIN Posts p ON t.id = p.threadId
GROUP BY t.id
ORDER BY MAX(p.id) DESC

これはDUPLICATE、自動グループ化が原因で問題が発生するためです。このトピックの詳細については、この回答を参照してください。

于 2012-06-05T23:20:18.107 に答える