[英]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_id
和dogs.id=dog_toys.dog_id
,您可以简单地在一个查询中JOIN
所有三个表,然后修改SELECT
返回的结果。
我在这里创建了一个示例小提琴: https : //www.db-fiddle.com/f/ukBgL4M3NzkyTDC6nMGkJn/1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.