首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分层数据的反向查询

分层数据的反向查询
EN

Stack Overflow用户
提问于 2013-06-27 14:13:48
回答 1查看 262关注 0票数 0

我看过一篇文章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 |

并返回下面的数据。

代码语言:javascript
复制
  SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
 FROM category AS t1
 LEFT JOIN category AS t2 ON t2.parent = t1.category_id
 LEFT JOIN category AS t3 ON t3.parent = t2.category_id
 LEFT JOIN category AS t4 ON t4.parent = t3.category_id
 WHERE t1.name = 'ELECTRONICS';

 +-------------+----------------------+--------------+-------+
 | lev1        | lev2                 | lev3         | lev4  |
 +-------------+----------------------+--------------+-------+
 | ELECTRONICS | TELEVISIONS          | TUBE         | NULL  |
 | ELECTRONICS | TELEVISIONS          | LCD          | NULL  |
 | ELECTRONICS | TELEVISIONS          | PLASMA       | NULL  |
 | ELECTRONICS | PORTABLE ELECTRONICS | MP3 PLAYERS  | FLASH |
 | ELECTRONICS | PORTABLE ELECTRONICS | CD PLAYERS   | NULL  |
 | ELECTRONICS | PORTABLE ELECTRONICS | 2 WAY RADIOS | NULL  |
 +-------------+----------------------+--------------+-------+
6 rows in set (0.00 sec)

现在我的问题是,如果我有一个表或查询,其中包含以下数据

代码语言:javascript
复制
  +-------------+----------------------+--------------+-------+
  | lev1        | lev2                 | lev3         | lev4  |
  +-------------+----------------------+--------------+-------+
  | ELECTRONICS | TELEVISIONS          | TUBE         | NULL  |
  | ELECTRONICS | TELEVISIONS          | LCD          | NULL  |
  | ELECTRONICS | TELEVISIONS          | PLASMA       | NULL  |
  | ELECTRONICS | PORTABLE ELECTRONICS | MP3 PLAYERS  | FLASH |
  | ELECTRONICS | PORTABLE ELECTRONICS | CD PLAYERS   | NULL  |
  | ELECTRONICS | PORTABLE ELECTRONICS | 2 WAY RADIOS | NULL  |
  +-------------+----------------------+--------------+-------+

如何进行反向查询,返回以下数据:

代码语言: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 |

如果我还可以有level字段的值(0或1或...)在这个反向查询中做得非常好。

代码语言:javascript
复制
   category_id | name                 | parent |position

   +-------------+----------------------+--------+-------
 |           1 | ELECTRONICS          |   NULL |0
 |           2 | TELEVISIONS          |      1 |0
 |           3 | TUBE                 |      2 |3
 |           4 | LCD                  |      2 |1
 |           5 | PLASMA               |      2 |2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 14:19:54

身份证是从哪里来的?假设您有另一个表,每个项目都有ID,那么代码可能如下所示:

代码语言:javascript
复制
select i.ID, l.lev1 as Name, NULL as Parent
from IDTable i 
     join LevelTable l on i.Name = l.lev1
union
select i.ID, l.lev2 as Name, (select j.ID from IDTable j where j.Name = l.lev1)
from IDTable i 
     join LevelTable l on i.Name = l.lev2
union
select i.ID, l.lev3 as Name, (select j.ID from IDTable j where j.Name = l.lev2)
from IDTable i 
     join LevelTable l on i.Name = l.lev3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17335772

复制
相关文章

相似问题

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