我正在构建一些非常简单的论坛软件,作为我的PHP和MySQL技能的一种自我测试,但我不太确定如何完成这项任务。我有一个名为Threads
的表,其中包含所有线程的列表。我还有一个名为Posts
的表,其中包含所有帖子。每个表的主键是一个自动增量ID。 Posts
中的每一行还包含它所属线程的ID。
虽然我可以使用如下查询轻松检索某个子论坛中的所有主题:
SELECT * FROM Threads WHERE ForumID='$forumid'
...我不确定如何根据每个帖子的最新帖子对其进行排序。我可以得到任何给定线程的帖子,如下所示:
SELECT * FROM Posts WHERE ThreadID='$threadid'
...但我不知道如何将这些数据合并到我的初始查询中进行排序。由于每个帖子都有唯一的ID,因此ID较高的帖子总是更新,因此无需比较日期或类似内容。我不清楚如何实际查询。
我很确定这只在MySQL中可行,但如果不是,那么最有效的PHP解决方案是什么?谢谢!
答案 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。