代码之家  ›  专栏  ›  技术社区  ›  Extrakun

MySQL-递归树结构

  •  9
  • Extrakun  · 技术社区  · 14 年前

    location (<id>, ....)
    location_parent (<location_id>, <parent_id>)
    

    $sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN
    ( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
    

    在给定父位置的情况下,我如何仅使用MySQL获取其所有子位置,无论其位置有多深?

    4 回复  |  直到 14 年前
        1
  •  25
  •   Pekka    13 年前

    有一个 good-looking article 在mysql.com上,我们将介绍管理分层数据的各种方法。我认为它为您的问题提供了一个完整的解决方案,并展示了各种不那么简单但更快的方法(例如嵌套集)。

        2
  •  6
  •   deltragon    4 年前

    这是一个老问题,但自从我在寻找解决方案的过程中绊倒了。

    自MySQL 8.0以来,您可以使用 recursive CTE 为此:

    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;
    

    这假设DB结构与原始问题略有不同(例如,只有一个表同时包含父/子表),但是,我确信这种技术也适用于该表。

        3
  •  0
  •   Eimantas    14 年前

    由于mysql语句只能返回表结构数据,您如何想象返回的树结构?

    查看本文,了解MySQL中存储的树状结构的实现: http://articles.sitepoint.com/article/hierarchical-data-database/