2012-08-09 122 views
3

我在我使用这个数据结构模型的类别中有一个表。另外用另一个表格来显示分类的路径:Mysql Adjancency:获取叶的所有父母

**t_category** 
id | name | parent 
------------------ 
1 mascot null 
2 cat  1 
3 dog  1 
4 doberman 3 

**t_category_path** 
id | path 
------------------ 
1 /1/ 
2 /1/2/ 
3 /1/3/ 
4 /1/3/4/ 

我想要的是获取任何项目的父母的列表。例如,如果我搜索“狗”获得“狗,吉祥物”,如果我搜索“杜宾犬”应该得到“杜宾,狗,吉祥物”

我试过这个......但它是相反的,我的意思是寻找父母们的叶子:

SELECT 
    c2.id, 
    c2.name, 
    p.path 
FROM t_category c, t_category c2, t_category_path p, t_category_path p2 
WHERE c.id = 1 
AND p2.id = c.id 
AND p.path LIKE(CONCAT(p2.path,'%')) 
AND c2.id = p.id 
ORDER BY p.path ASC; 

,显然得到:

id | name | path 
------------------ 
1 mascot /1/ 
2 cat  /1/2/ 
3 dog  /1/3/ 
4 doberman /1/3/4/ 

,但我从 “杜宾犬” 希望获得:

id | name | path 
------------------ 
1 mascot /1/ 
3 dog  /1/3/ 
4 doberman /1/3/4/ 

是否可以从叶子咨询?

回答

0

您应该打出路径字段中描述的数据。使用这样的事情:

id | depth | parent 
4 2  3 
4 1  1 
3 1  1 
3 2  3 

等...

然后,你可以这样做:

SELECT * FROM t_category_path WHERE ID = 4