首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL hierarchy -仅显示不是父项的子项

MySQL hierarchy -仅显示不是父项的子项
EN

Stack Overflow用户
提问于 2014-02-04 05:05:14
回答 1查看 63关注 0票数 0

我有一个类别表。

Ex (从http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/修改)

代码语言:javascript
复制
+-------------+----------------------+--------+
| category_id | name                 | parent |
+-------------+----------------------+--------+
|           1 | ELECTRONICS          |   NULL |
|           2 | TELEVISIONS          |      1 |
|           3 | TUBE                 |      2 |
|           4 | LCD                  |      2 |
|           5 | PLASMA               |      2 |
|           6 | PORTABLE ELECTRONICS |      1 |
|           7 | MP3 PLAYERS          |      6 |
|           8 | FLASH                |      7 |
|           9 | CD PLAYERS           |      6 |
|          10 | 2 WAY RADIOS         |      6 |
|          11 | MINI                 |      7 |
|          12 | OFFERS               |   NULL |
+-------------+----------------------+--------+

没有父级的条目是根节点。我想创建一个显示根节点及其后代的视图。

例如:

代码语言:javascript
复制
+-------------+----------------------------------------------------------+
| category_id | category_total                                           |
+-------------+----------------------------------------------------------+
|           3 | ELECTRONICS > Televisions > Tube                         |
|           4 | ELECTRONICS > Televisions > LCD                          |
|           5 | ELECTRONICS > Televisions > Plasma                       |
|           8 | ELECTRONICS > Portable electronics > MP3 players > Flash |
|          11 | ELECTRONICS > Portable electronics > MP3 players > Mini  |
|           9 | ELECTRONICS > Portable electronics > CD Players          |
|          10 | ELECTRONICS > Portable electronics > 2 way radios        |
|          12 | OFFERS                                                   |
+-------------+----------------------------------------------------------+

例如,如果类别5,‘等离子体’应该得到一个子类别,‘等离子体’不应该出现在这个列表的最后一个类别,但它的后代应该相反:

代码语言:javascript
复制
+-------------+----------------------------------------------------------+
| category_id | category_total                                           |
+-------------+----------------------------------------------------------+
|           3 | ELECTRONICS > Televisions > Tube                         |
|           4 | ELECTRONICS > Televisions > LCD                          |
|          13 | ELECTRONICS > Televisions > Plasma > Small               |
|          14 | ELECTRONICS > Televisions > Plasma > Big                 |
|           8 | ELECTRONICS > Portable electronics > MP3 players > Flash |
|          11 | ELECTRONICS > Portable electronics > MP3 players > Mini  |
|           9 | ELECTRONICS > Portable electronics > CD Players          |
|          10 | ELECTRONICS > Portable electronics > 2 way radios        |
|          12 | OFFERS                                                   |
+-------------+----------------------------------------------------------+

将有最多4个级别的类别。

EN

回答 1

Stack Overflow用户

发布于 2014-02-04 06:02:22

尝试此查询(sqlFiddle)

代码语言:javascript
复制
CREATE VIEW myView AS
SELECT c.category_id,
       IF(p3.name IS NULL,
          IF(p2.name IS NULL,IF(p1.name IS NULL,c.name,CONCAT(p1.name,' > ',c.name)),
             CONCAT(p2.name,' > ',p1.name,' > ',c.name)),
          CONCAT(p3.name,' > ',p2.name,' > ',p1.name,' > ',c.name)
          )
       as category_total

FROM category c
LEFT JOIN category child ON child.parent = c.category_id
LEFT JOIN category p1 ON p1.category_id = c.parent
LEFT JOIN category p2 ON p2.category_id = p1.parent
LEFT JOIN category p3 ON p3.category_id = p2.parent
WHERE child.category_id is null;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21537740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档