Heim > Fragen und Antworten > Hauptteil
const getCompanyShifts = (req, res) => { try { const { company_id } = req.params; connection.query( `SELECT * FROM jobs WHERE company_fk=${company_id}`, (err, rowss) => { if (!err) { connection.query( `SELECT * FROM shift WHERE isBooked=1 AND fk_job = ?`, [rowss.jobsID], (err, rows) => { if (err || rows.length === 0) { res.status(404).json({ success: false, message: "Company Shifts Not Found!", err, }); } else { const shifts = []; rows.forEach((row, i) => { const shift = { shiftID: rows[i].shiftID, shiftStartTime: rows[i].startTime, shiftEndTime: rows[i].endTime, shiftDate: rows[i].date, isBooked: rows[i].isBooked, fk_job: rows[i].fk_job, fk_guard: rows[i].fk_guard, }; shifts.push(shift); }); res.status(200).json({ success: true, message: "Successfully Retrieved Company Shifts!", shifts, }); } } ); } else { res.status(404).json({ success: false, message: "Company Jobs Not Found!", }); } } ); } catch (error) { res.status(500).json({ success: false, message: error.message, }); } };
In der ersten Abfrage des obigen Codes erhalte ich alle Zeilen von jobs
表中获取所有行。在第二个嵌套查询中,我试图从 shift
表中获取第一个查询返回的每个 jobsID
. Aber ich bekomme keine Daten. Die Daten sind da und sollten die Daten zurückgeben, aber ich erhalte keine Daten. Was mache ich hier falsch? Bitte helfen Sie!
P粉9795861592024-04-04 09:11:08
我认为对数据如何返回以及第二个查询如何工作存在误解。根据您的说法:
您将返回多行。所以第一个查询有效。但是取回多行将导致 rowss
成为 array
。因此,用作下一个查询的输入的 rowss.jobsID
不是数组的正确使用,我希望该表达式的值是 undefined
,这将导致第二个查询不返回任何内容。
为了证明像这样添加 console.log(rowss)
:
[...] connection.query( `SELECT * FROM jobs WHERE company_fk=${company_id}`, (err, rowss) => { console.log(rowss); [...]
为了解决这个问题,我建议使用sql功能并发出join
。通过这样做,数据库将连接两个表,然后仅返回满足 where
条件的行。组合语句应如下所示:
SELECT * FROM jobs WHERE company_fk=${company_id} LEFT JOIN shift ON shift.fk_job = jobs.jobsID WHERE isBooked=1
提示:根据 ob's
和 shift
的数据库方案,您可能需要扩展 *
并显式列出所有表名称,例如SELECT jobs.jobsID、jobs.<xyz>、shift.isBooked、shift.fk_job [...] FROM [...]
。如果两个表中都有相同名称的列,则可能需要解决由 join
引起的冲突,同时组合列以返回结果,如下所示: SELECT [...] shift.<xyz> as shift_xyz [. ..]来自...[]
。
还有一个优点,您还只需要一个 SQL 查询,而不是两个。