我正在创建一个类别和子类别系统。假设我有一个主要类别,例如'Food'
。它有一个孩子,如'Drinks'
,饮料有另一个孩子'Juice'
,果汁有孩子'Organic'
,而有孩子有孩子'Grape Juice'
。所以基本上Food
是主要的父,结构是Food>Drinks>Juice>Organic>Grape Juice
。现在我将它们存储在类别表中,如下所示:
正如您所见,我有一个直接的父ID,例如pid
。现在我如何从此表中选择主类别Food
下的所有类别名称?我将获得cat_id
1.那么,我如何使用此cat_id
来跟踪表中的所有子类别及其子,子子等?什么是SQL?有人可以帮忙吗?提前谢谢。
答案 0 :(得分:1)
这将选择与where子句中给出的ca_tid相关的所有列。我相信这就是你要求的。如果没有,请详细说明。
SELECT
cat_level_1.cat_name AS cat_level_1,
cat_level_2.cat_name AS cat_level_2,
cat_level_3.cat_name AS cat_level_3,
cat_level_4.cat_name AS cat_level_4,
cat_level_5.cat_name AS cat_level_5
FROM your_table AS cat_level_1
JOIN your_table AS cat_level_2
ON cat_level_1.ca_tid = cat_level_2.pid
JOIN your_table AS cat_level_3
ON cat_level_2.ca_tid = cat_level_3.pid
JOIN your_table AS cat_level_4
ON cat_level_3.ca_tid = cat_level_4.pid
JOIN your_table AS cat_level_5
ON cat_level_4.ca_tid = cat_level_5.pid
WHERE cat_level_1.ca_tid = 1
答案 1 :(得分:0)
我在Stack Overflow上发现了这个:MySQL - Recursing a tree structure接受的答案的文章对这个主题非常详细。
答案 2 :(得分:0)
如果整个表严格遵循新类别' '
为pid
的格式,并且整个层次结构存储在连续性中,则后续查询将适用于任意数量的子类别:
select
* from
t
where cat_id >= 1 // Instead of 1, you can put here the passed `cat_id`
and cat_id < (select min(cat_id)
from t
where pid = ' ' and cat_id > 1) // Instead of 1, you can put here the passed `cat_id`
;