根据另一个查询排序MySQL查询?

时间:2012-06-05 06:19:42

标签: php mysql sorting

我正在构建一些非常简单的论坛软件,作为我的PHP和MySQL技能的一种自我测试,但我不太确定如何完成这项任务。我有一个名为Threads的表,其中包含所有线程的列表。我还有一个名为Posts的表,其中包含所有帖子。每个表的主键是一个自动增量ID。 Posts中的每一行还包含它所属线程的ID。

虽然我可以使用如下查询轻松检索某个子论坛中的所有主题:

SELECT * FROM Threads WHERE ForumID='$forumid'

...我不确定如何根据每个帖子的最新帖子对其进行排序。我可以得到任何给定线程的帖子,如下所示:

SELECT * FROM Posts WHERE ThreadID='$threadid'

...但我不知道如何将这些数据合并到我的初始查询中进行排序。由于每个帖子都有唯一的ID,因此ID较高的帖子总是更新,因此无需比较日期或类似内容。我不清楚如何实际查询。

我很确定这只在MySQL中可行,但如果不是,那么最有效的PHP解决方案是什么?谢谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

一个简单的JOIN语句是解决方案:

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

这为您提供了所有主题的最新帖子。

答案 3 :(得分: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由于其自动分组而导致问题。有关该主题的更多信息,请参阅this answer