Search code examples
sqlmysqlhierarchynested-sets

MySQL Nested Sets - How to find parent of node?


I have your run of the mill nested set hierarchy type setup with the following columns:

table name:

myset

columns:

id, name, lft, rgt

Does anyone know a query to determine the parent of a node?

I read a couple places that it's handy to also have a parent_id column in your table to keep track of this, but it seems redundant and it seems like it could get out of sync with the nested set if a query was incorrectly executed when adding/removing/moving anything within the set.


Solution

  • Look at this question. It is similar to yours. I have posted there a query you may need.

    SELECT title, (SELECT TOP 1 title 
               FROM tree t2 
               WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt    
               ORDER BY t2.rgt-t1.rgt ASC) AS parent
    FROM tree t1
    ORDER BY rgt-lft DESC
    

    I hope there is what you need.

    For the following table:

    +-------------+----------------------+-----+-----+
    | category_id | name                 | lft | rgt |
    +-------------+----------------------+-----+-----+
    |           1 | ELECTRONICS          |   1 |  20 |
    |           2 | TELEVISIONS          |   2 |   9 |
    |           3 | TUBE                 |   3 |   4 |
    |           4 | LCD                  |   5 |   6 |
    |           5 | PLASMA               |   7 |   8 |
    |           6 | PORTABLE ELECTRONICS |  10 |  19 |
    |           7 | MP3 PLAYERS          |  11 |  14 |
    |           8 | FLASH                |  12 |  13 |
    |           9 | CD PLAYERS           |  15 |  16 |
    |          10 | 2 WAY RADIOS         |  17 |  18 |
    

    it produces the output:

    title                | parent
    ----------------------------------------------
    ELECTRONICS          | NULL
    PORTABLE ELECTRONICS | ELECTRONICS
    TELEVISIONS          | ELECTRONICS
    MP3 PLAYERS          | PORTABLE ELECTRONICS
    FLASH                | MP3 PLAYERS
    CD PLAYERS           | PORTABLE ELECTRONICS
    2 WAY RADIOS         | PORTABLE ELECTRONICS
    TUBE                 | TELEVISIONS
    LCD                  | TELEVISIONS
    PLASMA               | TELEVISIONS