您好,我有一个这样的数据库结构和其中的一些数据
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我想以日产为头,在展示所有的车型之后。还有丰田的车头和它下面的车型。如何使用一个查询来实现这一点?这有可能吗?
发布于 2017-07-26 15:58:18
您应该规范化您的数据库,或者至少将您的列分开,以便有一个制造商列和一个模型列。然后,这将帮助您执行如下查询
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个表
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希望这能有所帮助
发布于 2017-07-26 16:13:59
试试这个,它应该能解决你的问题:
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}替换为您的表名称(您在问题中提供的名称)。
https://stackoverflow.com/questions/45320573
复制相似问题