我有下表:
+----+--------+
| id | parent |
+----+--------+
| 1 | 4 |
| 2 | 1 |
| 3 | NULL |
| 4 | NULL |
| 5 | 2 |
| 6 | 3 |
+----+--------+
我希望这个表的排序方式如下:
+----+--------+------------------------------------------------------------+
| id | parent | Why it has to be ordered like this |
+----+--------+------------------------------------------------------------+
| 5 | 2 | 5 has parent 2 has parent 1 has parent 4. So 3 rows above. |
| 2 | 1 | 2 has parent 1 has parent 4. So 2 rows above. |
| 1 | 4 | 1 has parent 4. So 1 row above. |
| 6 | 3 | 6 has parent 3. So 1 row above. |
| 4 | NULL | No parent. So 0 rows above. |
| 3 | NULL | No parent. So 0 rows above. |
+----+--------+------------------------------------------------------------+
所以我想递归计算一行的祖先并对其进行排序。我怎么能这样做?
编辑:我使用的是MySQL版本5.7.21。
答案 0 :(得分:1)
您可以使用递归CTE执行此操作,但您没有列出您的mysql版本,并且并非所有版本都可以执行此操作,因此这里的内容甚至可以用于旧版本。这使用临时表和while语句进行递归。临时表使用主表中每条记录的一条记录构建,该记录保存父计数数据。首先我们做所有没有父节点的记录,然后while内的查询执行下一代的所有记录。请注意,语法可能有点偏离,我还没有完成mysql一段时间。
[^...]