在 MySQL 中,我有以下 object
表:
| id | parent_id | name |
|---:|----------:|:-----|
| 1 | NULL | root |
| 2 | 9 | obj1 |
| 3 | 10 | obj2 |
| 4 | 7 | obj3 |
| 5 | 8 | obj4 |
| 6 | 4 | obj5 |
| 7 | 2 | obj6 |
| 8 | 3 | obj7 |
| 9 | 1 | obj8 |
| 10 | 1 | obj9 |
以及以下查询以获取从我的元素 (id 6) 到根目录的路径:
SELECT @id :=
(
SELECT parent_id
FROM object
WHERE id = @id
) AS tree
FROM (
SELECT @id := 6
) a
STRAIGHT_JOIN object
WHERE @id IS NOT NULL
结果是:
| tree |
|-----:|
| 4 |
| 7 |
| 2 |
| 9 |
| 1 |
| NULL |
但我需要在结果中有一个计数器,它表示通过路径的遍历(就像 for 循环中的一个计数器):
| tree | ctr |
|-----:|----:|
| 4 | 1 |
| 7 | 2 |
| 2 | 3 |
| 9 | 4 |
| 1 | 5 |
| NULL | 6 |
是否可以添加计数器,如何添加?
最佳答案
我不确定您的查询是否保证有效,但它可能(在 straight join
和子查询之间,执行顺序可能得到保证)。您可以使用另一个变量来获取计数器:
SELECT @id := (SELECT parent_id
FROM object
WHERE id = @id
) AS tree,
(@rn := @rn + 1) as ctr
FROM (SELECT @id := 6, @rn := 0) a STRAIGHT_JOIN
object
WHERE @id IS NOT NULL;
关于mysql - 带循环计数器的递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917383/