MySQL - Recursing a tree structure

后端 未结 3 795
温柔的废话
温柔的废话 2020-12-01 16:52

I have a database table which link locations together; a location can be in a location, which can be inside another location.

location (, ....)
loc         


        
相关标签:
3条回答
  • 2020-12-01 17:35

    There's a good-looking article over at mysql.com outlining various ways of managing hierarchical data. I think it provides a full solution to your question, and shows various less simple, but faster approaches (e.g. Nested Sets).

    0 讨论(0)
  • 2020-12-01 17:37

    Since mysql statements can return only table-structured data, how do you imagine the returned tree-structure?

    It is possible to do a selection with [parent_id, child_id] table, but it requires temporary table and I've seen it done on DB2, not on MySQL.

    Check this article for implementation on tree-like structures stored in MySQL: http://articles.sitepoint.com/article/hierarchical-data-database/

    0 讨论(0)
  • 2020-12-01 17:42

    This is an old question, but since i stumbled over this searching for a solution.

    Since MySQL 8.0, you can use a recursive CTE for this:

    WITH RECURSIVE tmp (id) AS
    (
      SELECT id
        FROM locations
        WHERE parent_id IS NULL
      UNION ALL
      SELECT l.id
        FROM tmp AS p JOIN locations AS l
          ON p.id = l.parent_id
    )
    SELECT * FROM tmp
    ORDER BY id;
    

    This assumes a slightly different DB structure than in the original question (eg. there is only one table containing both parents/children), however, I am sure that this technique applies there as well.

    0 讨论(0)
提交回复
热议问题