【问题标题】:Nested set model query select nodes inside a parent嵌套集模型查询选择父节点内的节点
【发布时间】:2014-09-27 06:39:23
【问题描述】:

我有一个嵌套集模型如下。

HOME
  MUSIC
   GUITAR
   KEY BOARD
   RADIO

  FURNITURE
   BDD
   TABLE

  BOOKS
   BIBLE
   Godfather

我的问题是查询如何在父元素中显示子元素? 例如。

MUSIC, FURNITURE, BOOKS 列为父级HOMEGUITAR,KEY BOARD, RADIO 列为父级 MUSIC

我尝试了以下查询

select * from elements where lft between 1 and 22 order by lft asc

用于选择第一个父母孩子,但它返回整个列表。

谁能帮帮我?

提前致谢

表格结构看起来像

-------+-------------------+------------+----------
id     |     cat_name      |   lft      |   rgt
-------|-------------------+------------+----------
1      |       HOME        |   1        |   22

【问题讨论】:

    标签: mysql treeview nested hierarchy hierarchical-data


    【解决方案1】:

    这会给你你想要的:

    SELECT
        c.cat_name
    FROM
        tree_struc t
    JOIN
        tree_struc c
        ON c.lft BETWEEN t.lft + 1 AND t.rgt - 1
    LEFT JOIN
        tree_struc a
        ON a.lft BETWEEN t.lft + 1 AND t.rgt - 1
        AND c.lft BETWEEN a.lft + 1 AND a.rgt - 1
    WHERE t.cat_name = 'Music' AND a.id IS NULL;
    

    SQL Fiddle

    【讨论】:

    • 感谢您的回复。此查询是否适用于任何深层结构?
    • 是的,小提琴的例子是家庭,但音乐或书籍也会给出正确的结果。如果您需要更多解释,请随时询问
    【解决方案2】:

    在我看来,最好的方法是执行以下操作,使用 :p_parent_id 作为替换变量,其中包含您要检索的子类别的 ID:

    select * from elements where parent_id = :p_parent_id
    

    【讨论】:

    • 感谢您的回复。但我对parent_id感到困惑。更新了我有问题的表结构。你能检查一下吗?
    • 你说的是邻接列表,OP有一个嵌套集。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多