首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确的方式是什么?使用javascript和mysql

正确的方式是什么?使用javascript和mysql
EN

Stack Overflow用户
提问于 2019-05-16 16:34:59
回答 3查看 52关注 0票数 0

我有一个名为"cars“的mysql表,其中存储了:”品牌“、”型号“、”颜色“。我想要这样的数据:

代码语言:javascript
复制
[
    {
        brand: "audi",
        cars: [
            {
                "model": "coupe",
                "color": "red",
            },
            {
                "model": "a3",
                "color": "blue",
            },
        ]
    },
    {
        brand: "renault",
        cars: [
            {
                "model": "modus",
                "color": "white",
            },
            {
                "model": "clio",
                "color": "green",
            },
        ]
    },
    ...
]

因此,我所做的是第一个mysql查询,其中我按品牌分组,然后迭代结果以获得每个品牌的所有汽车:

代码语言:javascript
复制
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查询迭代?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-16 17:01:45

像这样的东西应该能起到作用。不过,它的客户端转换:

代码语言:javascript
复制
let carArr = []

const query = "SELECT brand, model, color from cars"
mysql.query(query, values, (err, result) => {
    for (let i = 0; i < result.length; i++) {
        // Get the index of the brand in the carArr array
        let brandIndex = carArr.map(c => c.brand).indexOf(result.brand)

        // If the brand is not already in carArr, enter a new value for it
        if(brandIndex == -1)
            carArr.push({"brand": result.brand, "cars": [{"model": result.model, "color": result.color}]})

        // If the brand already exists, add the car type to this specific barnd
        else
            carArr[brandIndex].cars.push({"model": result.model, "color": result.color})
    }
})
票数 0
EN

Stack Overflow用户

发布于 2019-05-16 16:58:25

你可以这样做:

代码语言:javascript
复制
const carsByBrand=[],brands={};  
function find(){
 const query = "SELECT model, color FROM cars WHERE brand IN ('renault','bmw')"
 mysql.query(query, values, (err, result) => {
    /*assuming value  to be like: [
            {
              brand:audi,
                "model": "coupe",
                "color": "red",
            },
            ]
       */

  values.forEach((car)=>{
      if(brands[car.brand]){
        carsByBrand[brands[car.brand]].cars.push(car)
      }else{
        let index=carsByBrand.push({
          brand:car.brand,
          cars:[car]
        })
        brands[car.brand]=index;
      }
    })    
  }
 })

}
find()
票数 0
EN

Stack Overflow用户

发布于 2019-05-16 17:46:58

我们可以通过使用GROUP_CONCATCONCAT的mysql函数来实现单次查询。一旦你得到结果汽车密钥将JSON字符串。您可以使用JSON.parse方法进行转换

代码语言:javascript
复制
select brand,CONCAT("[",GROUP_CONCAT(CONCAT("{'model':'",model,"','color':'",color,"'}")),"]") as cars from cars GROUP BY brand;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56164236

复制
相关文章

相似问题

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