按子查询排序,其中另一列与id匹配

时间:2011-07-28 21:58:36

标签: php mysql sql

我有下表

ID | tbl | reply |   time
--- ----- ------- -----------
1  | blue|   0   |   01:00
--- ----- ------- -----------
2  | red |   1   |   01:05
--- ----- ------- -----------
3  | pink|   1   |   11:11
--- ----- ------- -----------
4  | pink|   0   |   22:22
--- ----- ------- -----------
5  | pink|   4   |   00:03
--- ----- ------- -----------

回复引用ID列,因此ID和回复都有连接。 ID是回复的父级。当reply=0表示我们选择了父行时,它就是回复。

目前我有这个简单的mysql查询,以便只选择父母

SELECT tbl, time FROM table WHERE reply=0 ORDER BY time ASC 

首先会选择ID=1,然后选择ID=4

我想要的是能够在孩子们的时候给父母订购,而不是向孩子们展示。因此,在上面的示例中,只是因为ID=5的时间为0:03,所以ID=4应首先显示,然后ID=1

除了创建另一个表外,有什么想法吗? 如果它是更好的可能任何PHP的想法如何做到这一点?

非常感谢

1 个答案:

答案 0 :(得分:1)

我的SQL有点生疏,但是:

SELECT t.tbl, t.time 
FROM table t 
WHERE t.reply=0 
ORDER BY 
(SELECT MAX(time) FROM table WHERE reply = t.id) DESC,
t.time DESC

诀窍是给主查询表一个名称(在这个例子中为t) - 然后你可以在子查询中引用它,而不会让服务器感到困惑。

我知道这可能只是你的例子,但你最好将你的时间列存储为DATETIME甚至是UNIX时间戳(在INT字段中)。你需要这个日期,所以昨天23:00发布的东西不会比今天15:00发布的东西更新近