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, }); } };
Dans la première requête du code ci-dessus, j'obtiens toutes les lignes de jobs
表中获取所有行。在第二个嵌套查询中,我试图从 shift
表中获取第一个查询返回的每个 jobsID
. Mais je ne reçois aucune donnée. Les données sont là et devraient renvoyer les données mais je ne reçois aucune donnée. Qu'est-ce que je fais de mal ici ? s'il vous plaît, aidez-moi !
Je pense qu'il y a un malentendu sur la façon dont les données sont renvoyées et sur le fonctionnement de la deuxième requête. Selon vous :
Vous renverrez plusieurs lignes. La première requête fonctionne donc. Mais la récupération de plusieurs lignes entraînera
rowss
成为array
。因此,用作下一个查询的输入的rowss.jobsID
不是数组的正确使用,我希望该表达式的值是undefined
, ce qui fera que la deuxième requête ne renverra rien.Pour prouver ajoutez
console.log(rowss)
comme ceci :Pour résoudre ce problème, je suggère d'utiliser la fonction sql et d'émettre
join
。通过这样做,数据库将连接两个表,然后仅返回满足where
les lignes de la condition. La déclaration combinée devrait ressembler à ceci :Conseils : Basé sur
ob's
和shift
的数据库方案,您可能需要扩展*
并显式列出所有表名称,例如SELECT jobs.jobsID、jobs.<xyz>、shift.isBooked、shift.fk_job [...] FROM [...]
。如果两个表中都有相同名称的列,则可能需要解决由join
引起的冲突,同时组合列以返回结果,如下所示:SELECT [...] shift.<xyz> as shift_xyz [. ..]来自...[]
.Autre avantage, vous n’avez également besoin que d’une seule requête SQL au lieu de deux.