mysql Node.js + Express将两个查询放入一个JSON对象

kpbwa7wx  于 2023-03-07  发布在  Mysql
关注(0)|答案(1)|浏览(239)

我是Node.js和Express的新手,设法有一个简单的API从mysql数据库中获取数据。到目前为止一切顺利。简单的请求没有问题。但对于下面的例子,我需要一些帮助。我尝试了一些事情,但根本不工作。所以我没有任何代码,因为它根本不工作。我使用mysql 2连接到数据库。
我有两个表,第一个包含matchdays,另一个包含matchday_scores,所以我需要得到一个JSON文件,结构如下:

[
 {
   "matchdayid": 1,
   "matchdaydate": "2023.02.12",
   "scores":
          [{
            "name": "Ed",
            "legs_won": 3,
            "average": 47,8},
          {
            "name": "Nick",
            "legs_won": 2,
            "average": 42,1}],
  },
  {
   "matchdayid": 2,
   "matchdaydate": "2023.02.19",
   "scores":
          [{
            "name": "Ed",
            "legs_won": 3,
            "average": 47,8},
           {
            "name": "Nick",
            "legs_won": 2,
            "average": 42,1}],
  },
 ....

这到底有没有可能?
我要么使用matchdayid来建立一个新的查询,要么在一个查询中将其排序。但是对于这两个查询,我真的没有任何更多的线索来实现它。提前感谢!

0wi1tuuw

0wi1tuuw1#

matchdayid连接两个表,然后循环遍历结果,创建嵌套数组和对象,每当matchdayid发生变化时,在结果数组中启动一个新对象,并将得分推送到其scores数组中。

db.query(`SELECT m.matchdayid, m.matchdaydate, s.name, s.legs_won, s.average
        FROM matchday AS m
        JOIN matchday_scores AS s ON m.matchdayid = s.matchdayid
        ORDER BY m.matchdayid`, function(res, err) {
  if (err) {
    throw err;
  }
  let results = [];
  let lastid = null;
  let curscore;
  res.forEach(({
    matchdayid,
    matchdaydate,
    name,
    legs_won,
    average
  }) => {
    if (matchdayid !== lastid) {
      curscore = {
        matchdayid,
        matchdaydate,
        scores: []);
      results.push(curscore);
    }
    curscore.scores.push({
      name,
      legs_won,
      average
    });
  });
  console.log(results);
});

相关问题