我有这张表:
+------------+-------------+------------------+
| product_id | category_id | parent_category |
+------------+-------------+------------------+
| 1 | aaa | 0 |
| 1 | bbb | aaa |
| 1 | ccc | bbb |
| 2 | aaa | 0 |
| 2 | bbb | aaa |
| 2 | ddd | 0 |
因此,我想排除相同product_id
中的父类别,以便从表中仅获取最低级别的类别。parent_category
0
表示它是顶级类别(没有父类别)
例如,排除具有category
aaa
的第一行,因为在第二行中有类别bbb
,并且aaa
是bbb
的父级(对于product_id=1)。
所需输出:
+------------+---------------+
| product_id | category_id |
+------------+---------------+
| 1 | ccc |
| 2 | bbb |
| 2 | ddd |
所以实际上是aaa->bbb->ccc
和ddd->eee->fff
这样的类别结构。如果产品在aaa
bbb
ddd
类别中,我想得到bbb
和ddd
。
我的思绪:php正在使用中,所以我会创建脏的php循环。
编辑:阐明获取树叶是一个问题
2条答案
按热度按时间mutmk8jj1#
如果你没有严格地绑定到
recursive CTE
,你可以简单地检查一个给定的类别是否有子类别。如果没有-它是一个叶子(尊重相同的product_id)。工作example。
如果你想检查每个父节点的
product_id
,这是行不通的。atmip9wb2#
尝试使用
recursive CTE
:DEMO