下面是表结构:
CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`from_uid` int(11) NOT NULL,
`content` varchar(300) NOT NULL,
`parent` int(11) DEFAULT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `from_uid` (`from_uid`),
KEY `parent` (`parent`),
CONSTRAINT `message_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `u
ser` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `message_ibfk_2` FOREIGN KEY (`from`) REFERENCES `user
` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `message_ibfk_3` FOREIGN KEY (`parent`) REFERENCES `message` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 |这是一个存储用户消息及其回复的表。如果我对整个查询应用一个限制,假设限制为30,结果将是包含父消息和子消息(回复)的30行。但是,如何获得30个父消息和每条消息的回复呢?
发布于 2011-12-16 05:36:21
试试这个:
SELECT `message`.*
FROM
`message` INNER JOIN
(SELECT `id` FROM `message` WHERE `parent` IS NULL LIMIT 30) `ids` ON
`message`.`id` = `ids`.`id` OR `message`.`parent` = `ids`.`id`https://stackoverflow.com/questions/8526748
复制相似问题