我有一张这样的表
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 :(得分: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
让我知道它是否有效