我有以下表格
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
--- ----- ------- -----------
reply指向ID列,因此ID和reply有连接。ID是reply的父节点。当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的想法,如何做到这一点?
非常感谢
我的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发布的内容更近期