按顺序执行mysql查询nodejs

我是 nodejs 的新手,正在使用它来构建带有 mysql 数据库的 api,并且遇到了无法按顺序执行 mysql 查询的问题。

数据库结构是三张表。表a与表b是一对多关系,表b与表c是一对多关系。

我需要一个提供援助的 GET 端点,它返回一个结果,其中包含 b 的项目数组,其中嵌套了 c 的项目数组。

示例结果:

{ logcode: "",
logmessage: "",
bitems: [{
bitemid: 1
citems: [{ citemid: 1 } { citemid: 2 }]
}{
bitemid: 2
citems: [{ citemid: 3 }]
}]
}

目前我正在尝试通过首先执行一个查询来执行此操作,在该查询中我检索与实体 a 的接收键相对应的所有类型 b 的值,然后在结果上运行 foreach 循环并提取 bitem id,然后在其中运行另一个查询foreach 循环获取具有该特定外键的表 c 的所有项目。

async function (req, res) {


   let functionname = 'getAllItems'


   const conLocalPool = db.conLocalPool.promise();

   var data = {}

   const atoken = req.get('token');


   var str = ``;


   str = `call ${functionname}('${atoken}')`;

   console.log(str);

   try {

       const [rows, fields] = await conLocalPool.query(str)

       data = rows[0][0]

       if (data.logcode === 20100) {

           data.bitems = rows[1];

           data.bitems.forEach(async (bitem) => {

               var stmt = `Select * from \`table-c\` where bitemid=${bitem.id}`

               try {

                   const [citemrows, citemfields] = await conLocalPool.query(stmt);

                   console.log(citemrows[1])

                   bitem.citems = citemrows[1];

                   return true;

               }

               catch (err) {

                   console.log(err);

                   return false;

               }


           })

       }

       res.status(200).send(data);

       return true;

   }



   catch (err) {

       res.status(500).send({

           error: err.message

       });

       return false;

   }

}


使用这个函数,我能够得到一个响应,其中包含与 aitemtoken 相关的所有 bitem,但没有与每个单独 bitem 相关的 citems。


我想要一些关于如何执行第一个查询然后根据它检索到的响应执行后续查询的帮助。


12345678_0001
浏览 111回答 1
1回答

慕桂英546537

根据您最后的评论,我相信您可以通过这样做来实现它JOIN。有几种方法可以做到这一点,但请考虑下面的示例:SELECT * FROM owner o JOIN dogs d ON o.id=d.owner_idJOIN dog_toys t ON d.id=t.dog_idWHERE o.id=1;假设您有 3 个表(owner、dogs 和 dog_toys),并且每个表都有一个owner.id=dogs.owner_id和的关系dogs.id=dog_toys.dog_id,您可以简单地JOIN在一个查询中将它们全部三个并修改返回的结果SELECT。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript