我有一个消息表 -
msg
_____
id int(11)
subject varchar(255)
content text
create_time datetime
parent int(11)
parent
是msg
表本身的外键。parent
只能引用parent
设置为NULL
的行,即会话中的所有回复都有一个父级:第一条消息谈话。我希望能够按create_time
的降序选择父消息,同时考虑其回复的create_time
,例如分组对话的顺序Gmail中。我还想加入最近的答复(如果存在的话)给每个家长。
我无法提出正确的SQL。这就是我到目前为止所做的 -
SELECT * FROM `msg` `parent`
LEFT JOIN `msg` `reply`
ON `reply`.`parent` = `parent`.`id`
WHERE `parent`.`parent` IS NULL
GROUP BY `parent`.`id`
ORDER BY `reply`.`create_time` DESC
这有两个直接问题是 -
ORDER BY
子句。我很欣赏正确方向的捅。感谢。
答案 0 :(得分:0)
ORDER BY `reply`.`create_time` DESC, `parent`.`create_time` DESC
答案 1 :(得分:0)
这对我有用 -
SELECT `parent`.`id` AS `pId`
, `parent`.`create_time` AS `pTime`
, `parent`.`subject`
, `parent`.`content` AS `pContent`
, `reply`.`id` AS `rId`
, `reply`.`create_time` AS `rTime`
, `reply`.`content` AS `rContent`
, IF(`reply`.`create_time` IS NULL, `parent`.`create_time`, `reply`.`create_time`) AS `max_time`
FROM `msg` `parent`
LEFT JOIN
`msg` `reply`
ON `reply`.`parent` = `parent`.`id`
WHERE `parent`.`parent` IS NULL
ORDER BY `max_time` DESC