首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL将父项作为标题,将子项作为项

MySQL将父项作为标题,将子项作为项
EN

Stack Overflow用户
提问于 2017-07-26 15:47:19
回答 2查看 28关注 0票数 0

您好,我有一个这样的数据库结构和其中的一些数据

代码语言:javascript
复制
id | parent_id | name

1 | 0 | Nissan
2 | 1 | 240SX
3 | 1 | 350z
4 | 0 | Toyota
5 | 4 | Camry
6 | 4 | Prado
7 | 1 | Skyline
8 | 4 | Hilux

我想以日产为头,在展示所有的车型之后。还有丰田的车头和它下面的车型。如何使用一个查询来实现这一点?这有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-26 15:58:18

您应该规范化您的数据库,或者至少将您的列分开,以便有一个制造商列和一个模型列。然后,这将帮助您执行如下查询

代码语言:javascript
复制
SELECT * FROM CARS WHERE manufacturer = 'Toyota';
or
SELECT * FROM CARS GROUP BY manufacturer;

但最好的做法是有一个用于存储制造商的表和一个用于存储所有车型的表,然后是一个用于存储您的汽车本身的表,该表将具有从其他两个表引用的2列。

因此,这将成为: id | parent_id | manufacturer_id | model_id

1|0|1|2

2|1|4|1

3|1|3|6

4|0|3|9|

然后,您将执行查询以连接这3个表

代码语言:javascript
复制
SELECT cars.id, cars.parent_id, cars.manufacturer_id, cars.model_id, t1.manufacturer_name, t2.model_name from CARS
JOIN manufacturer_table t1 
ON t1.manufacturer_id = cars.manufacturer_id
JOIN model_table t2
ON t2.model_id = cars.model_id

希望这能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2017-07-26 16:13:59

试试这个,它应该能解决你的问题:

代码语言:javascript
复制
SELECT
  child.*
FROM
  {your_table} parent
LEFT JOIN
  {your_table} child ON child.parent_id = parent.id 
                     OR (child.parent_id = 0 AND child.id = parent.id)
WHERE
  parent.parent_id = 0
ORDER BY
  parent.id, child.parent_id, child.name

应该在两个位置将{your_table}替换为您的表名称(您在问题中提供的名称)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45320573

复制
相关文章

相似问题

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