【发布时间】:2013-11-09 07:33:01
【问题描述】:
我在选择具有子/父关系的多个结果时遇到了困难。这是带有类别树的表格。 category 表代表关系,而category_name 表包含名称字符串:
[category] [category_name]
id, id_parent id, name
------------- --------------
1 NULL 1 'animal'
2 1 2 'mammal'
3 2 3 'lion'
4 2 4 'sea_creature'
5 4 5 'lion'
作为输入,我有名字,必须翻译成 id。层次结构正好是 3 级深。例如:animal, mammal, lion, -> 1, 2, 3。
如您所见,lion 名称用于不同的类别。但是,上一级类别是唯一的,子类别的名称在一个父类别中是唯一的。
我可以进行三个单独的查询,从 animal 开始,然后重用其 id 以与后续查询的 id_parent 进行比较:
查询 #1:
SELECT
cn.id
FROM
category_name cn
WHERE
cn.name = 'animal'
(将此查询的结果保存在变量parent中)
查询 #2:
SELECT
cn.id
FROM
category_name cn
INNER JOIN category c ON cn.id = c.id
WHERE
cn.name = 'mammal' AND c.id_parent = <parent>
等等。但我确信有更好的方法来做到这一点。
谢谢。
【问题讨论】:
-
您可以使用“UNION”并确保使用它时的性能。