Php 根据另一个查询对MySQL查询进行排序?
我正在构建一些非常简单的论坛软件,作为对我的PHP和MySQL技能的一种自我测试,但我不太确定如何完成这项任务。我有一个名为Php 根据另一个查询对MySQL查询进行排序?,php,mysql,sorting,Php,Mysql,Sorting,我正在构建一些非常简单的论坛软件,作为对我的PHP和MySQL技能的一种自我测试,但我不太确定如何完成这项任务。我有一个名为Threads的表,其中包含所有线程的列表。我还有一个名为Posts的表,其中包含所有Posts。每个表的主键是一个自动递增ID。Posts中的每一行还包含它所属线程的ID 虽然我可以通过如下查询轻松检索某个子论坛中的所有线程: SELECT * FROM Threads WHERE ForumID='$forumid' SELECT * FROM Posts WHERE
Threads
的表,其中包含所有线程的列表。我还有一个名为Posts
的表,其中包含所有Posts。每个表的主键是一个自动递增ID。Posts
中的每一行还包含它所属线程的ID
虽然我可以通过如下查询轻松检索某个子论坛中的所有线程:
SELECT * FROM Threads WHERE ForumID='$forumid'
SELECT * FROM Posts WHERE ThreadID='$threadid'
…我不知道如何根据每个帖子的最新帖子对其进行排序。我可以获得任何给定线程的帖子,如下所示:
SELECT * FROM Threads WHERE ForumID='$forumid'
SELECT * FROM Posts WHERE ThreadID='$threadid'
…但我不知道如何将这些数据合并到我的初始查询中进行排序。因为每个帖子都有一个唯一的ID,ID越高的帖子总是越新,所以没有必要比较日期或类似的事情。我只是不清楚如何实际进行查询
我很确定这在MySQL中是可能的,但如果不是,什么是最有效的PHP解决方案?谢谢 像这样的事情可以帮助你
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.last_modified_time DESC
或
简单的JOIN语句是解决方案:
SELECT *
FROM Threads t
JOIN Posts p ON t.ThreadID = p.ThreadID
ORDER BY t.ModificationDate DESC -- or whatever column you want
这将为您提供所有线程的最新帖子。一个简单的连接语句就是解决方案:
SELECT *
FROM Threads t
JOIN Posts p ON t.ThreadID = p.ThreadID
ORDER BY t.ModificationDate DESC -- or whatever column you want
这将为您提供所有线程的最新帖子。请尝试使用
内部连接
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
使用内部联接尝试此操作
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
所有给出的答案都非常接近,但我最终使用了以下查询:
选择t*
从线程t
t.id上的内部连接柱p=p.threadId
按t.id分组
按最大(p.id)说明订购
这是由于重复
导致自动分组问题。有关该主题的更多信息,请参阅。所有给出的答案都非常接近,但我最终使用了以下查询:
选择t*
从线程t
t.id上的内部连接柱p=p.threadId
按t.id分组
按最大(p.id)说明订购
这是由于重复
导致自动分组问题。有关该主题的更多信息,请参阅。您是否可以为线程
和帖子
表添加基本模式,以便我们也可以测试查询!我认为它应该按照子句的顺序与列组合一起工作。正确设计的join应该做到这一点,否则您将不得不求助于子查询。无论如何,这两种方法都有很好的文档记录。请参阅此链接中的第三个示例:@JakeKing-但是Posts表中应该有threadID。所以像@odiszpac写下来的那样加入他们,然后按t.id,p.id排序,我试过了,效果不错,但有一个问题。首先应用ORDER BY
,然后DISTINCT
删除重复项。但是,它从开头而不是结尾删除重复项,因此失败。有什么方法可以扭转这种行为吗?您可以添加线程
和帖子
表的基本模式,以便我们也可以测试查询!我认为它应该按照子句的顺序与列组合一起工作。正确设计的join应该做到这一点,否则您将不得不求助于子查询。无论如何,这两种方法都有很好的文档记录。请参阅此链接中的第三个示例:@JakeKing-但是Posts表中应该有threadID。所以像@odiszpac写下来的那样加入他们,然后按t.id,p.id排序,我试过了,效果不错,但有一个问题。首先应用ORDER BY
,然后DISTINCT
删除重复项。但是,它从开头而不是结尾删除重复项,因此失败。有没有办法扭转这种行为?非常接近,请看我对问题的评论。非常接近,请看我对问题的评论。