4 回答
TA贡献1802条经验 获得超4个赞
尝试执行以下步骤:
获取第一个查询的结果并获取 id 值,例如 (1,2,3,4,...)..
并在 where 子句之外执行带有
WHERE
条件IN
子句的第二个查询
喜欢
$sql_items = "SELECT id FROM item_masterfile"; /* this query has 7000 rows */
$result_items = mysqli_query($con,$sql_items);
while ($row_items = mysqli_fetch_row($result_items)) {
$ids[] = $row_items['id'];
}
$sql_qty = "SELECT qty FROM inventory WHERE id IN ".$ids;
/* rest of the code here */
}
TA贡献1821条经验 获得超4个赞
尝试使用限制和偏移量进行批量处理,如下所示
$offset = $i * 5000; // $i is run batch number .. 1, 2, 3 etc in the foreach() loop.
if ($i == 0) {
$offset = "";
}
$result_items="SELECT id FROM item_masterfile LIMIT 5000 OFFSET $offset;";
TA贡献1836条经验 获得超5个赞
您问题中的代码显示表之间存在 one_to_one 或 one_to_many 关系,因此使用分页和 join 语句可以解决该问题。检查下面的代码希望有帮助
$sql = "
SELECT im.id, i.qty
FROM item_masterfile AS im
JOIN inventory AS i ON
im.id = i.item_masterfile_id
LIMIT $offset, $limit
";
$result_items = mysqli_query($con,$sql);
您可以在代码中动态设置 $offset 和 $limit 并继续...
TA贡献1827条经验 获得超8个赞
您应该收集数组中的所有 id,然后使用 IN 运算符将所有 id 一次性传递给查询,而不是使用循环并在其中提供 id。
示例:SELECT qty FROM inventory WHERE id IN (1,2,3,4,5)
. 通过这样做,您可以避免循环,并且您的代码不会因超时错误而退出。
或者
您可以在主查询中使用子查询来实现相同的效果
例子:SELECT qty FROM inventory WHERE id IN (SELECT id FROM item_masterfile)
- 4 回答
- 0 关注
- 100 浏览
添加回答
举报