我正在尝试进行将分层数据分组的MySQL查询。这是数据库的一个例子
table name: location
locationID INT UNSIGNED NOT NULL AUTO_INCREMENT,
parentID INT UNSIGNED NOT NULL,
name CHAR(255)
这是一些示例数据
locationID parentID name
1 | 0 | United States
2 | 1 | Massachusetts
3 | 2 | Boston
4 | 2 | Worcester
5 | 1 | New York
6 | 5 | Brooklyn
7 | 1 | Colorado
8 | 7 | Denver
9 | 0 | Canada
10 | 9 | Ontario
11 | 10 | Toronto
12 | 9 | Quebec
13 | 12 | Quebec City
以上名称仅是示例,旨在了解我希望如何处理查询。
我希望以特定的方式显示以上表格数据。
我希望将parentID = 0的行按名称升序排列(国家/地区),并在每行下列出parentID与locationID(州/省)匹配的行,并在每行下列出parentID与locationID匹配的行(城市)。
到目前为止,这是我一直尝试的结果,但没有成功。
SELECT locationID,parentID,name FROM location ORDER BY parentID ASC name ASC
以及
SELECT locationID,parentID,name FROM location GROUP BY 'parentID' ORDER BY name ASC
我希望能够添加行并选择一个父对象,并生成一个列表,该列表的顶部有一个父对象,然后是每个孩子下面的孩子以及每个孩子下面的孩子的孩子,等等。我正在使用MySQL和PHP进行编程
感谢您提供任何解决此问题的建议,这些建议将是最有帮助和赞赏的。
最佳答案
create table location
(
id int auto_increment primary key,
parentId int not null, -- avoid nulls, 0 is top-level
place varchar(100) not null
);
insert location(parentId,place) values (0,'Canada'),(0,'Mass'),(0,'Jersey');
insert location(parentId,place) values (2,'Boston'),(2,'Newton'),(2,'Woods Hole');
insert location(parentId,place) values (5,'Chestnut Hill');
insert location(parentId,place) values (3,'Montclair'),(3,'Secaucus');
-- get first level children
select t1.*,t2.*
from location t1
join location t2
on t2.parentId=t1.id and t1.place='Mass'
关于php - 我如何在MySQL中组织来自单个表的分层数据组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31188296/