我是 nodejs 的新手,正在使用它来构建带有 mysql 数据库的 api,并且遇到了无法按顺序执行 mysql 查询的问题。数据库结构是三张表。表a与表b是一对多关系,表b与表c是一对多关系。我需要一个提供援助的 GET 端点,它返回一个结果,其中包含 b 的项目数组,其中嵌套了 c 的项目数组。示例结果:{ logcode: "",logmessage: "",bitems: [{bitemid: 1citems: [{ citemid: 1 } { citemid: 2 }]}{bitemid: 2citems: [{ 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。我想要一些关于如何执行第一个查询然后根据它检索到的响应执行后续查询的帮助。
1 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
根据您最后的评论,我相信您可以通过这样做来实现它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。
添加回答
举报
0/150
提交
取消