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!
我认为对数据如何返回以及第二个查询如何工作存在误解。根据您的说法:
您将返回多行。所以第一个查询有效。但是取回多行将导致
rowss
成为array
。因此,用作下一个查询的输入的rowss.jobsID
不是数组的正确使用,我希望该表达式的值是undefined
,这将导致第二个查询不返回任何内容。为了证明像这样添加
console.log(rowss)
:为了解决这个问题,我建议使用sql功能并发出
join
。通过这样做,数据库将连接两个表,然后仅返回满足where
条件的行。组合语句应如下所示:提示:根据
ob's
和shift
的数据库方案,您可能需要扩展*
并显式列出所有表名称,例如SELECT jobs.jobsID、jobs.<xyz>、shift.isBooked、shift.fk_job [...] FROM [...]
。如果两个表中都有相同名称的列,则可能需要解决由join
引起的冲突,同时组合列以返回结果,如下所示:SELECT [...] shift.<xyz> as shift_xyz [. ..]来自...[]
。还有一个优点,您还只需要一个 SQL 查询,而不是两个。