【发布时间】:2023-03-15 16:30:01
【问题描述】:
我有一个名为“汽车”的 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 查询得到这个结果?或者我应该从“汽车”表中获取所有行,然后做 JS 的东西来格式化数据?还是我应该继续使用这个 mysql 查询迭代?
谢谢
【问题讨论】:
-
如果您不想转换数据,为什么不使用像 MongoDB 这样的面向 json 的数据库?
-
问题是你想返回原始数据给客户端还是分组数据。最好的做法并不重要,重要的是需要数据的人如何处理数据。
-
@MauriceNino 我不能用 MongoDB .. 我已经用 mysql 运行了一个 web 应用程序,我没有抱怨这个
-
@briosheje 数据是客户端需要的,所以我可以在服务器或客户端进行转换
-
您可以使用 :` "SELECT model, color FROM cars WHERE brand IN ('renault','bmw')"` 并在 JS 中对整体进行分组
标签: javascript mysql arrays object