suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Es können keine Daten aus einer verschachtelten SQL-Abfrage abgerufen werden

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粉594941301P粉594941301231 Tage vor457

Antworte allen(1)Ich werde antworten

  • P粉979586159

    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'sshift 的数据库方案,您可能需要扩展 * 并显式列出所有表名称,例如SELECT jobs.jobsID、jobs.<xyz>、shift.isBooked、shift.fk_job [...] FROM [...]。如果两个表中都有相同名称的列,则可能需要解决由 join 引起的冲突,同时组合列以返回结果,如下所示: SELECT [...] shift.<xyz> as shift_xyz [. ..]来自...[]

    还有一个优点,您还只需要一个 SQL 查询,而不是两个。

    Antwort
    0
  • StornierenAntwort