我有一个名为"cars“的mysql表,其中存储了:”品牌“、”型号“、”颜色“。我想要这样的数据:
[
{
brand: "audi",
cars: [
{
"model": "coupe",
"color": "red",
},
{
"model": "a3",
"color": "blue",
},
]
},
{
brand: "renault",
cars: [
{
"model": "modus",
"color": "white",
},
{
"model": "clio",
"color": "green",
},
]
},
...
]因此,我所做的是第一个mysql查询,其中我按品牌分组,然后迭代结果以获得每个品牌的所有汽车:
const query = "SELECT brand FROM cars GROUP BY brand"
mysql.query(query, values, (err, result) => {
for (let i = 0; i < result.length; i++) {
const query2 = "SELECT model, color FROM cars WHERE brand = ?"
const values2 = [result[i].brand]
mysql.query(query2, values2, (err2, result2) => {
result[i].cars = result2
callback(result)
})
}
})我展示的代码正在运行,但我不认为对mysql查询进行迭代是一件好事。
我做了很多研究,我真的不知道该怎么做。
一次mysql查询就能得到这个结果吗?或者,我应该从"cars“表中获取所有行,然后执行JS操作来格式化数据?或者我应该继续使用这个mysql查询迭代?
谢谢
发布于 2019-05-16 17:46:58
我们可以通过使用GROUP_CONCAT、CONCAT的mysql函数来实现单次查询。一旦你得到结果汽车密钥将JSON字符串。您可以使用JSON.parse方法进行转换
select brand,CONCAT("[",GROUP_CONCAT(CONCAT("{'model':'",model,"','color':'",color,"'}")),"]") as cars from cars GROUP BY brand;https://stackoverflow.com/questions/56164236
复制相似问题