我必须管理我不是SQL-guru,也许这个查询非常简单,但我无法写出来。基本上所有页面都是使用邻接列表模型排列的(我也跟踪深度):
+----+---------------+-------------------+-----------+
| 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中是否可行,不支持递归?
答案 0 :(得分:0)
您可以在限制查询时使用自联接。或者尝试使用嵌套式或celko树。