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

像这样的东西可以帮助你

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 回答