我正在尝试创建一个将分层数据分组的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 < / p>
任何有关解决这个问题的建议都会非常有用和赞赏,感谢先进。
答案 0 :(得分:0)
我建议你的数据库设计是错误的,这样就可以根据需要查询数据,因此可以根据需要进行格式化。
考虑三个表:
Appno HAppno Name Hname Height Hheight weight Hweight Createddate Hcreateddate
app1036 app1036 john john 8 NULL 40 NULL 2015-07-02 20:14:45.590 2015-07-02 20:14:45.590
通过这种设计,查询几乎可以与您交谈。
答案 1 :(得分:0)
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'