【发布时间】:2013-06-20 15:01:25
【问题描述】:
我目前正在为我的一个项目开发一个消息传递系统。我正在使用单个表来存储 消息 和 回复(即使用 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
【问题讨论】:
-
" 如果 parent_id=NULL 则它是一条新消息" - 那么 parent_id 'not null' 怎么办?
-
耻辱,NULL 的想法更好!
-
你真正想要展示的东西是什么?
-
发件人、主题和正文、日期
-
谢谢Yak,我在问题中添加了查询,请检查。感谢您的回复。