根据另一个 MySQL 查询获取数据

Fetch data based on another MySQL query

我有以下两个问题。第一个查询是从第一个名为 tags 的 table 中获取一个名为 srNumber 的键,然后第二个查询使用该 srNumber 从第二个 table 中获取详细信息称为 nexttable.

$tagQuery = "SELECT * FROM tags WHERE status = 0 AND currentStage = '1' AND assignedTo = '1' ORDER BY 
deliveryDate ASC";
$tagQueryExecute = mysqli_query($conn, $tagQuery);
while($rows = mysqli_fetch_array($tagQueryExecute)){
  $srNumber = $rows['srNumber'];

  $nextQuery = "SELECT * FROM nexttable WHERE srNumber='$srNumber'";
  $nextQueryExecute = mysqli_query($conn, $nextQuery);
  $detailsFromNextTable = mysqli_fetch_array($nextQueryExecute);

  //Show these details

}

对于一个小的结果,这不是一个大问题。但是如果第一个查询得到这么多结果,那么第二个查询必须 运行 循环次数的倍数。有没有其他方法可以有效地做到这一点?

注意:请忽略这些查询的 SQL 注入问题。我只是简化它以显示问题

因为您似乎在第二行中只有 1 行 table,您最好使用联接,MySQL: Quick breakdown of the types of joins 提供了有关联接类型的更多信息。

SELECT * 
    FROM tags t
    JOIN nexttable n on t.srNumber = n.srNumber
    WHERE t.status = 0 AND t.currentStage = '1' AND t.assignedTo = '1' 
    ORDER BY t.deliveryDate ASC

这也删除了 SQL 注入。

我还建议删除 * 并只列出您打算使用的列,如果您在不同的 table 中具有相同名称的列,这也会有所帮助,因为您可以添加特定列的别名。

仅供参考 - 您遇到的原始问题类似于 What is the "N+1 selects problem" in ORM (Object-Relational Mapping)?