我有一个无法正确排序的帖子/评论数据库。
我需要它主要按它的 id 排序,但如果它的 parent_id 不等于它的 id,它会放在它的父级之后,而且这些子级也会按 id 排序。
这是我当前的数据库。
CREATE TABLE `questions` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`parent_id` int(10) NOT NULL,
`entry_type` varchar(8) NOT NULL,
`entry_content` varchar(1024) NOT NULL,
`entry_poster_id` varchar(10) NOT NULL,
`entry_status` varchar(1) NOT NULL,
`entry_score` varchar(10) NOT NULL,
`time_posted` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Dumping data for table `questions`
--
INSERT INTO `questions` VALUES(1, 1, 'question', 'How do I does SQL?', 'CodyC', '0', '2', '1308641965');
INSERT INTO `questions` VALUES(2, 1, 'answer', 'Easy, you eat cheese!', 'PatrickS', '0', '-4', '1308641965');
INSERT INTO `questions` VALUES(3, 2, 'comment', 'WTF are you on noobass?!', 'FraserK', '0', '100', '1308641965');
INSERT INTO `questions` VALUES(4, 1, 'answer', 'blah', '5', '0', '0', '1308642204');
INSERT INTO `questions` VALUES(5, 4, 'comment', 'blah2', '4', '0', '0', '1308642247');
INSERT INTO `questions` VALUES(6, 2, '2', '3', '3', '3', '3', '3');
和我当前的查询
SELECT *
FROM questions
WHERE parent_id =1
OR parent_id
IN (
SELECT id
FROM questions
WHERE parent_id =1
AND parent_id != id
)
我该如何订购,以便每个对象的订单 ID 都在其父级之后,其中 id = parent_id 表示是基本级别并且没有父级?
最佳答案
这似乎可行:
SELECT *
FROM questions
order by case when parent_id != id then parent_id else id end, id;
但这取决于你是否想要孙子而不是 child 等。你的问题没有具体说明。
但是,如果您使用此技术,您可以根据需要使订购条款尽可能复杂 - 它不需要是一个已选择列 - 只需组成您需要的内容。
关于mysql - 非平凡表达式的排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435078/