MySQL将Parent作为标题,将子项作为项

时间:2017-07-26 07:47:19

标签: php mysql sql database

你好,我有这样的数据库结构,里面有一些数据

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

我想把日产作为标题,然后展示所有车型。丰田也是它的标题,它的模型也低于它。如何使用一个查询实现此目的?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

您应该规范化数据库或者至少将列分开,以便有制造商列和模型列。这将帮助您进行查询,例如

SELECT * FROM CARS WHERE manufacturer = 'Toyota';
or
SELECT * FROM CARS GROUP BY manufacturer;

但最好的做法是设置一个用于存放制造商的表格和一个用于存储所有汽车模型的表格,然后是一个用于存储汽车本身的表格,其中有2列从其他2个表格中引用。< / p>

所以这会变成: 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

希望有所帮助

答案 1 :(得分:0)

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

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}应该用你的桌子名称(你在问题中提出)在两个地方替换。