我目前正在为我的一个项目开发一个消息传递系统。我正在使用单个表来存储消息和回复(即使用 parent_id)。
这是表结构:
CREATE TABLE IF NOT EXISTS `messages` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned NULL,
`sender_id` int(10) unsigned NOT NULL,
`receiver_id` int(10) unsigned NOT NULL,
`who` enum('bride','member') NOT NULL,
`subject` varchar(200) NOT NULL,
`body` text NOT NULL,
`sent_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
其中parent_id是我们回复的消息的 id。如果parent_id=NULL则它是一条新消息
谁是发送该消息的人- 即新娘或成员。我有两个单独的表格用于新娘和会员的详细信息。
现在我想要一个查询来列出收件箱中的消息(就像 GMAIL-一堆对话[消息+回复])。
你能帮我建立查询吗?
这就是我正在做的事情:
SELECT id
, parent_id
, sender_id
, receiver_id
, who
, subject
, body
, sent_date
FROM `messages`
WHERE sent_date IN ( SELECT MAX( sent_date ) FROM `messages` WHERE receiver_id = 1 GROUP BY sender_id )
AND who = 'bride'
AND receiver_id = 1
ORDER
BY id DESC
LIMIT 0, 8