【问题标题】:multiple level parent-child in same mysql table同一个mysql表中的多级父子
【发布时间】:2017-10-03 03:19:17
【问题描述】:

虽然我已经找到了几篇关于这个主题的帖子,但我还没有找到一个可以联系起来的答案。我使用的大多数 mysql 查询都相当简单,所以我可能只是没有关注。无论如何,我将不胜感激。

我有一个项目表:建筑物、地板、房间和插孔。每个千斤顶是一个房间的孩子,每个房间都是一个楼层的孩子,等等。

我希望能够列出所有孩子(楼层)和孩子的所有孩子,这样我就有一张按给定建筑物的楼层、房间、插孔排序的表格。

这是否可能而不用变得太复杂?

创建表items ( ObjectID int(11) 非空, ObjectType varchar(50) 整理 utf8_unicode_ci DEFAULT NULL, ObjectName varchar(50) 整理 utf8_unicode_ci DEFAULT NULL, OwnerId int(11) 默认为空 )

样本数据:
1,建筑,我的大厅,NULL
2楼,FL1,1
3,地板,FL2,1
10,房间,RM101,2
11,房间,RM102,2
12,房间,RM201,3
12,房间,RM202,3
51,千斤顶,C101-1,2
52,千斤顶,D202-1,12
53,杰克,D102-1,11

建议的查询结果:

我的大厅,FL1,RM101,C101-1

我的大厅,FL1,RM102,D102-1

我的大厅,FL2,RM201,

我的大厅,FL2,RM202,D202-1

【问题讨论】:

  • 这听起来不太复杂。你的数据结构/表是什么?
  • 您能否详细说明您需要输出的结构。像排杉木地板一样,每个大孩子都有自己的排?
  • 如果您认为@Venkateshwara Cholan 的回答正确指出您的数据有错误,您应该接受他们的回答是正确的。如果您在数据更正后有后续问题,您应该为此发布一个新问题(可能带有指向此问题的链接)。编辑问题+答案只会让未来的读者感到困惑。

标签: mysql hierarchical-data


【解决方案1】:

请试试这是http://sqlfiddle.com

CREATE TABLE items (  
  ObjectID int(11) NOT NULL,
  ObjectType varchar(50) DEFAULT NULL,
  ObjectName varchar(50) DEFAULT NULL,
  OwnerId int(11) DEFAULT NULL );

insert into items values(1,'building','my hall',NULL);
insert into items values(2,'floor','FL1',1);
insert into items values(3,'floor','FL2',1);
insert into items values(10,'room','RM101',2);
insert into items values(11,'room','RM102',2);
insert into items values(12,'room','RM201',3);
insert into items values(13,'room','RM202',3);
insert into items values(51,'jack','C101-1',10);
insert into items values(52,'jack','D202-1',13);
insert into items values(53,'jack','D102-1',11);

查询:

select distinct I1.ObjectName AS building,
            i2.ObjectName as floor,
            i3.ObjectName as room,
            i4.ObjectName as jack
from Items I1 
inner join Items i2 on I1.Objectid = i2.ownerId and I1.ObjectType = 'building' and i2.ObjectType = 'floor'
inner join Items i3 on i2.Objectid = i3.ownerId and i2.ObjectType = 'floor' and i3.ObjectType = 'room'
 left join Items i4 on i3.Objectid = i4.ownerId and i3.ObjectType = 'room' and i4.ObjectType = 'jack'
order by I1.ObjectName,i2.ObjectName,i3.ObjectName,i4.ObjectName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2017-06-27
    • 2013-10-22
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多