5
+--------+---------+-----------+
|   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 4id 4父级的行id 1,所以根 idid 5id 1
我不知道如何做到这一点,有没有办法通过仅使用 1 来解决这个问题询问

4

3 回答 3

3

这是一个简短的查询,可以满足您的要求,假设您的表被调用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
于 2015-06-19T19:54:53.947 回答
0

If your tree structure is more than say two layers deep you're searching for modified preorder tree traversal

于 2011-12-12T20:11:47.787 回答