我正在尝试进行将分层数据分组的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/

10-11 02:50
查看更多