Getting all parent rows in one SQL query

后端 未结 7 2011
温柔的废话
温柔的废话 2020-11-27 11:59

I have a simple MySQL table thats contains a list of categories, level is determined by parent_id:

id  name    parent_id
---------------------------
1   Home         


        
7条回答
  •  心在旅途
    2020-11-27 12:37

    Awesome answer by Mark Byers!

    Maybe a bit late to the party, but if you also want to prevent an infinite loop when id = parent_id (i.e. somehow when data has been corrupted), you can expand the answer like this:

        SELECT T2.id, T2.name
        FROM (
            SELECT
                @r AS _id,
                @p := @r AS previous,
                (SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
                @l := @l + 1 AS lvl
            FROM
                (SELECT @r := 5, @p := 0, @l := 0) vars,
                table1 h
            WHERE @r <> 0 AND @r <> @p) T1
        JOIN table1 T2
        ON T1._id = T2.id
        ORDER BY T1.lvl DESC
    

提交回复
热议问题