0

好的,所以我有一个名为 categories 的表,如下所示:

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

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

有任何想法吗?

4

6 回答 6

2

为这些结构尝试嵌套集。它的选择性能非常好,但写入性能很差。因此,如果您有更多的选择,如表上的插入或更新(结构更新),那么使用嵌套集是一个不错的选择。

带有嵌套集的面包屑以获取类别 1 -> 子类别 -> 子类别

于 2012-05-14T11:28:13.090 回答
0

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

select p.name, c.name
mytable c, mytable p
where c.parent_id = p.id
and c.id in (3,5)
于 2012-05-14T11:29:16.497 回答
0

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

于 2012-05-14T11:32:15.673 回答
0
select t2.name + "->" + t1.name 
from categories t1
inner join t2 on t1.id = t2.parent_id
where t1.id in (3, 5)
于 2012-05-14T11:33:14.037 回答
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
于 2012-05-14T11:34:03.307 回答
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/

于 2012-05-14T11:34:55.143 回答