我是 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。
我想要一些关于如何执行第一个查询然后根据它检索到的响应执行后续查询的帮助。
慕桂英546537
相关分类