邻接模型,给定一个id返回叶节点

时间:2012-05-09 08:54:12

标签: mysql

这是用于存储类别/子类别网站导航的表格:

   $query = "CREATE TABLE categories (
    id int(11) NOT NULL auto_increment,
    name varchar(100) NOT NULL,
    parentid int(11) NOT NULL,
     PRIMARY KEY  (id)
)"  ;

并说这些是表格中的条目

id  name    parentid
1   animal  NULL
2   vegetable NULL
3   mineral NULL
4   doggie  1
5   kittie  1
6   horsie  1
7   gerbil  1
8   birdie  1
9   carrot  2
10  tomato  2
11  potato  2
12  celery  2
13  rutabaga    2
14  quartz  3

我想要的是这样一个SQL查询,对于给定的id,返回所有叶子节点,如果给出了叶子节点的id,则叶子节点本身返回。

因此,如果设置了id 2,返回的行是 - 胡萝卜,番茄,土豆,芹菜,大头菜。 如果id为9,则返回的行为 - 9本身

可能的?

我的附属内容不会超过3级。

我尝试了给定on this page的代码,但如果给出了叶节点id,则它不会给叶子节点。

由于

我尝试了几个问题..

    SELECT distinct t1.name FROM
categories AS t1 LEFT JOIN categories as t2
ON t1.id = t2.parent
 LEFT JOIN categories as t3
ON t2.id = t3.parent
WHERE  t1.parent = ? OR t1.id = ?

但我根本无法理解联接。

编辑:如果叶子节点id给定部分,我可以放弃返回叶子节点。现在我只需要一个返回所有叶节点的查询,给定一个category / subcategory节点。再次感谢

2 个答案:

答案 0 :(得分:1)

所以我使用的最终查询如下所示:

SELECT distinct t2.id , t2.name FROM
    categories AS t1 LEFT JOIN categories as t2
    ON t1.id = t2.parent
     LEFT JOIN categories as t3
    ON t2.id = t3.parent
    WHERE  t1.parent = $id OR t1.id = $id and t2.visible = 1

如果返回空结果集,则表示提供了结束节点,我只返回提供的$ id。 它的工作。希望它会继续这样做,因为我在这里猜测。

答案 1 :(得分:0)

试试这段代码:

select * from `categories` where id=something and parentid is not null 
union all
select * from `categories` where parentid=something;

并告诉我它是否有效(替换具有所需值的东西)。