嵌套集模型查询选择父节点内的节点

时间:2014-09-27 06:39:24

标签: mysql treeview nested hierarchy hierarchical-data

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

HOME
  MUSIC
   GUITAR
   KEY BOARD
   RADIO

  FURNITURE
   BDD
   TABLE

  BOOKS
   BIBLE
   Godfather

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

将父级MUSIC, FURNITURE, BOOKS列为HOME 将父级GUITAR,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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

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

select * from elements where parent_id = :p_parent_id