Maison > Questions et réponses > le corps du texte
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 !
P粉9795861592024-04-04 09:11:08
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 :
[...] connection.query( `SELECT * FROM jobs WHERE company_fk=${company_id}`, (err, rowss) => { console.log(rowss); [...]
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 :
SELECT * FROM jobs WHERE company_fk=${company_id} LEFT JOIN shift ON shift.fk_job = jobs.jobsID WHERE isBooked=1
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.