Получение root родителя - PullRequest
       7

Получение root родителя

4 голосов
/ 12 декабря 2011
+--------+---------+-----------+
|   id   | title   | parent_id |
+--------+---------+-----------+
|    1   | Lvl-1   |   null    |
+--------+---------+-----------+
|    2   | Lvl-2   |   null    |
+--------+---------+-----------+
|    3   | Lvl-11  |     1     |
+--------+---------+-----------+
|    4   | Lvl-12  |     1     |
+--------+---------+-----------+
|    5   | Lvl-121 |     4     |
+--------+---------+-----------+

Как мне получить корневого родителя для каждой строки
Например, строка с id 5 имеет родителя с id 4 и id 4 имеет родителя с id 1, поэтому корневой идентификатор для id 5 равен id 1
Я не имею ни малейшего представления о том, как это сделать, и есть ли способ решить эту проблему, используя только 1 запрос

Ответы [ 3 ]

2 голосов
/ 19 июня 2015

Вот короткий запрос, выполняющий то, что вы спрашиваете, предполагая, что ваша таблица называется foo и что вы хотите знать корень <id>:

SELECT f.id, f.title
FROM (
    SELECT @id AS _id, (SELECT @id := parent_id FROM foo WHERE id = _id)
    FROM (SELECT @id := <id>) tmp1
    JOIN foo ON @id IS NOT NULL
    ) tmp2
JOIN foo f ON tmp2._id = f.id
WHERE f.parent_id IS NULL
0 голосов
/ 13 декабря 2011

Если ваша древовидная структура более двух уровней, вы ищете измененный обход дерева предзаказа

...