【发布时间】:2016-04-21 19:08:57
【问题描述】:
我有一张这样的桌子
CREATE TABLE `Table1` (
`id` INT NOT NULL AUTO_INCREMENT,
`parent` INT NOT NULL,
`comment` TEXT,
PRIMARY KEY(`id`)
);
其中有以下示例数据(评论字段中有一些用户生成的文本)
+------+---------+-
| id | parent |
+------+---------+
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 1 |
| 5 | 0 |
| 6 | 5 |
| 7 | 4 |
+------+---------+
如何在 SELECT 语句中获得以下顺序。
+------+---------+-
| id | parent |
+------+---------+
| 1 | 0 |
| 2 | 1 |
| 4 | 1 |
| 7 | 4 |
| 3 | 0 |
| 5 | 0 |
| 6 | 5 |
+------+---------+
我想在其父记录之后列出一条记录,并且父记录为 0 的行应根据其“id”进行排序。
【问题讨论】:
-
不清楚你能解释一下你所追求的排序逻辑吗?
-
您确定不希望父级为 0 的行在顶部,然后像其他行一样按 id 排序?我看不出这种排序有什么用。如果您根据值应用不同的排序规则......那么它并没有真正排序
-
MySQL 不是为做这些事情而设计的,最好在通过数组循环提取数据之后再做。
-
我同意之前的评论。 SQL 排序顺序逻辑期望有一个明确的值,结果应该按照该值进行排序。在后者
select中没有这样的东西。顺便说一句,我认为表结构也有点冒险或不清楚;如果parent值不能为空并且它指向同一个表,那么插入的第一行的父值是多少? (我知道没有定义引用完整性,但是当没有具有该 ID 的行时,0父引用可能会在以后给您带来麻烦。) -
@ AbhikChakraborty 我想根据站点用户发布的评论对站点用户发布的 cmets 进行排序。 @Toaster我确信“我不希望所有行与父0一起并且开始”。 @Jester 我不确定你是否正确。我只是在寻找解决方案。 @MJV 一个记录可以有父为0,如果它没有父。
标签: mysql