繁体   English   中英

nodejs顺序执行mysql查询

[英]Executing mysql queries sequentially nodejs

我对 nodejs 很陌生,正在使用它来构建一个带有 mysql 数据库的 api,但遇到了一个问题,我无法按顺序执行 mysql 查询。

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

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

示例结果:

{ 日志代码:"",
日志消息:“”,
位:[{
比特米:1
引用: [{ citemid: 1 } { citemid: 2 }]
}{
比特:2
引用: [{ citemid: 3 }]
}]
}

目前,我试图通过首先执行一个查询来执行此操作,在该查询中我检索与接收到的实体 a 键相对应的所有类型 b 的值,然后对结果运行 foreach 循环并提取位元 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 相关的所有位元,但没有与每个位元相关的位元。

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

根据您的最后一条评论,我相信您可以通过JOIN来实现它。 有几种方法可以做到这一点,但请考虑下面的这个例子:

SELECT * FROM owner o 
JOIN dogs d ON o.id=d.owner_id
JOIN dog_toys t ON d.id=t.dog_id
WHERE o.id=1;

假设您有 3 个表(owner、dogs 和 dog_toys)并且每个表都有owner.id=dogs.owner_iddogs.id=dog_toys.dog_id ,您可以简单地在一个查询中JOIN所有三个表,然后修改SELECT返回的结果。

我在这里创建了一个示例小提琴: https : //www.db-fiddle.com/f/ukBgL4M3NzkyTDC6nMGkJn/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM