无法在联接中正确组合分组依据和顺序分组

时间:2012-08-09 11:19:11

标签: mysql

我有一个消息表 -

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. 这不是给我一个父母最近的回复。
  3. 我很欣赏正确方向的捅。感谢。

2 个答案:

答案 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