mysql - 非平凡表达式的排序结果

标签 mysql dynamic sql-order-by

我有一个无法正确排序的帖子/评论数据库。

我需要它主要按它的 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/

相关文章:

mysql - 如何加快数据加载 XML 文件到 MySQL

c# - c# 中的动态对象,其中键具有 $ 符号

java - 从 ImageJ 插件动态加载类

c++ - 将动态数组传递给其他函数的正确方法

mysql - 从性能点理解两个查询之间的区别

mysql - 向 mySQL 数据库发出命令的批处理脚本?

mysql - 查询中同时使用 group by 和 order by 时避免创建临时表

mysql 测验排行榜按分数、花费时间过滤

mysql - 为什么 ORDER BY DAYOFWEEK() 的返回不是从星期日开始的?

mysql - 尝试在 Ubuntu 18.04 上安装 mysqlclient 时出现奇怪的错误