MYSQL返回父母&儿童

时间:2012-05-14 11:25:41

标签: mysql parent-child

好的,我有一个名为类别的表,如下所示:

id       name      parent_id
1        camera    null
2        computer  null
3        digital   1
4        gps       null
5        laptop    2

我希望能够返回电脑 - >笔记本电脑或相机 - >我在查询id = 3或5时数字化。

有什么想法吗?

6 个答案:

答案 0 :(得分:2)

尝试Nestedsets表示这些结构。它具有非常好的选择性能,但是糟糕的写入性能。因此,如果你有更多的选择,作为表上的插入或更新(结构更新),它是使用嵌套集的一个很好的选择。

带有嵌套集的

Breadcrumps以获得类别1 - >子类别 - >子类别

答案 1 :(得分:0)

如果它是结果集的固定列数

select p.name, c.name
mytable c, mytable p
where c.parent_id = p.id
and c.id in (3,5)

答案 2 :(得分:0)

您尝试使用的是反模式。如果您继续使用它,当您想要选择整个子类别树时,可能会遇到一些问题。看看正确模式的答案。

答案 3 :(得分:0)

select t2.name + "->" + t1.name 
from categories t1
inner join t2 on t1.id = t2.parent_id
where t1.id in (3, 5)

答案 4 :(得分:0)

如果您只有一个级别的父子参考:

SELECT IF(p.name IS NOT NULL, p.name + " -> " + a.name, a.name) AS name
FROM categories a
LEFT JOIN categories p ON a.parent_id = p.id

答案 5 :(得分:0)

使用自我左连接:

select a.name, b.name as parent_name from categories a left join categories b on a.parent_id = b.id where a.id in (3,5);

以上查询对于获得一级父级有效。如果您想遍历整个世系,请参阅以下链接。他们列出了几种标准的遍历树的方法:

http://jan.kneschke.de/projects/mysql/sp/