Mysql Adjacency:得到叶子的所有父母

时间:2012-08-09 15:28:30

标签: mysql adjacency-list

我在使用此数据结构模型的类别中有一个表。还可以使用另一个表来显示类别分支的路径:

**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/

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

我尝试了这个......但是反过来,我的意思是寻找父母得到的叶子:

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/

可以从叶子上咨询吗?

1 个答案:

答案 0 :(得分:0)

您应该在路径字段中分解描述的数据。使用这样的东西:

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

等...

然后你可以这样做:

  

SELECT * FROM t_category_path WHERE id = 4