0

私はメッセージテーブルを持っています -

msg
_____
id                  int(11)
subject             varchar(255)
content             text
create_time         datetime
parent              int(11)
  • parentmsgテーブル自体への外部キーです。
  • parentつまり、会話内のすべての返信が 1 つの親 (会話の最初のメッセージ) を持つようにparent設定された行のみを参照できます。NULL

Gmail のグループ化された会話の順序のように、返信も考慮して、メッセージを降順で選択できるようにしたいと考えています。また、各親への最新の返信 (存在する場合) を結合したいと考えています。create_timecreate_time

適切な 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

これに関する2つの差し迫った問題は -

  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 に答える