MySql:按id和parent排序记录

标签 mysql

我有一张这样的 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/

相关文章:

php - 在这种情况下如何循环查询?

mysql - 在 OS X 上设置 MySQL root 用户密码

php - 如何生成像 'xxx0000' , 'xxx0001' 这样的 id 号?

mysql - 检查整数列值

php - Mysql 之间比较一个字段?

MySQL 查询返回错误 ID

php - 如何在编辑页面显示记录?

mysql left join subselect

php - 在哪里保存数据?

php - 尝试在函数中设置 $_SESSION ['username' ] include