MySql:id和parent的订单记录

时间:2016-04-21 06:49:30

标签: mysql

我有一张这样的表

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”进行排序。

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您的评论结构为树(根为0,其他人都有父,最终链接到0)。 我不知道您使用的是哪种sql技术,但Oracle提供了一种按顺序显示树元素的方法。

寻找"从"开始和"通过"连接,例如: http://www.adp-gmbh.ch/ora/sql/connect_by.html

我认为这可以帮助您实现您想要的目标

类似的东西(根本没有测试,只是提示)

select * from Table1 start with 0 connect by parent

修改

由于您实际使用MySQL,因此无法使用上述解决方案(感谢@MJV注意)。 这是一个解决方案的想法。它假定您在插入新评论时可以在表格中添加更多信息。它还假设一个新的评论将具有比其父母更高的ID(用于轻松排序。您的示例似乎假设相同的事情)

您可以为表格中的每条评论添加root_parent(最高父级):

+------+---------+-------------+
| id   | parent  | root_parent |             Corresponding trees
+------+---------+-------------+
| 1    |    0    |      1      |         1         3          5
| 2    |    1    |      1      |        / \                  / 
| 3    |    0    |      3      |       /   \                /  
| 4    |    1    |      1      |      2     4              6 
| 5    |    0    |      5      |           / 
| 6    |    5    |      5      |          /
| 7    |    4    |      1      |         7
+------+---------+ ------------+

现在,您可以致电

订购
select * from table1 order by root_parent, id

让我知道它是否有效