mysql - 站点层次结构的邻接列表模型,如何按此特定顺序检索所有页面?

标签 mysql sql hierarchy hierarchical-data adjacency-list-model

我不得不说我不是 SQL 高手,也许这个查询真的很简单,但我写不出来。基本上所有页面都是使用邻接表模型排列的(我也在跟踪深层):

+----+---------------+-------------------+-----------+
| id | title         | level | position  | parent_id |
+----+---------------+-------+-----------+-----------+
|  1 | Home          | 0     | 0         | null      |
+----+---------------+-------+-----------+-----------+
|  2 | Resources     | 0     | 1         | null      |
+----+---------------+-------+-----------+-----------+
|  3 | About         | 0     | 2         | null      |
+----+---------------+-------+-----------+-----------+
|  4 | Documents     | 1     | 0         | 2         |
+----+---------------+-------+-----------+-----------+
|  5 | Tutorials     | 1     | 1         | 2         |
+----+---------------+-------+-----------+-----------+

请注意,位置在同一父项中是唯一的。

我想要实现的是按父类和位置排序,但是父类应该列在它的子类之前。这是显而易见的,但不起作用:

SELECT * FROM PAGE p
ORDER BY parent_id, position

结果是第一个表。我需要的是:

+----+---------------+-------------------+-----------+
| id | title         | level | position  | parent_id |
+----+---------------+-------+-----------+-----------+
|  1 | Home          | 0     | 0         | null      |
+----+---------------+-------+-----------+-----------+
|  2 | Resources     | 0     | 1         | null      | // Parent of 4, 5
+----+---------------+-------+-----------+-----------+
|  4 | Documents     | 1     | 0         | 2         | // Child of Resource
+----+---------------+-------+-----------+-----------+
|  5 | Tutorials     | 1     | 1         | 2         | // Child of Resource
+----+---------------+-------+-----------+-----------+
|  3 | About         | 0     | 2         | null      |
+----+---------------+-------+-----------+-----------+

这在不支持递归的 MySQL 中可行吗?

最佳答案

当您可以限制查询时,您可以使用自连接。或者尝试嵌套集或 celko 树。

关于mysql - 站点层次结构的邻接列表模型,如何按此特定顺序检索所有页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883013/

相关文章:

php - 如何通过数组排序在mysql IN和NOT IN中获取结果

php - MySql php 的重复结果

mysql - ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 不增加 autoindex

sql - 有趣的树/分层数据结构问题

javascript - 如何从平面 JavaScript 数组创建分层 HTML 结构?

mysql - 如何在数据库中存储多个产品的 'packages'

Jquery 数据表和 Mysql 错误 : The value of the search cannot be null. 如果没有执行搜索,请提供一个空字符串。

MySQL用条件语句触发并更新另一个表

php - 如何以特定顺序显示数据库中的php记录

CSS 层次结构类和 ID