gpt4 book ai didi

MySql:按id和parent排序记录

转载 作者:行者123 更新时间:2023-11-28 23:33:04 27 4
gpt4 key购买 nike

我有一张这样的 table

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,其他都有一个父节点,最终链接到0)。我不知道您使用的是哪种 sql 技术,但 Oracle 提供了一种按顺序显示树元素的方法。

寻找“start with”和“connect by”,例如这里: 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

如果成功了请告诉我

关于MySql:按id和parent排序记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36761724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com