Impossible d'obtenir les données d'une requête SQL imbriquée
P粉594941301
P粉594941301 2024-04-03 15:44:01
0
1
417

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粉594941301
P粉594941301

répondre à tous(1)
P粉979586159

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'sshift 的数据库方案,您可能需要扩展 * 并显式列出所有表名称,例如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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!