0

我有一个消息表 -

msg
_____
id                  int(11)
subject             varchar(255)
content             text
create_time         datetime
parent              int(11)
  • parentmsg是表本身的外键。
  • 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

两个直接的问题是 -

  1. 父创建时间不包含在该ORDER BY子句中。
  2. 这不是给我最近对父母的答复。

我很感激朝正确的方向戳。谢谢。

4

2 回答 2

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
于 2012-08-10T04:51:08.047 回答
0
ORDER BY `reply`.`create_time` DESC, `parent`.`create_time` DESC
于 2012-08-09T11:24:25.910 回答