这是用于存储类别/子类别网站导航的表格:
$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节点。再次感谢
答案 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;
并告诉我它是否有效(替换具有所需值的东西)。