4 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試執(zhí)行以下步驟:
獲取第一個(gè)查詢的結(jié)果并獲取 id 值,例如 (1,2,3,4,...)..
并在 where 子句之外執(zhí)行帶有
WHERE
條件IN
子句的第二個(gè)查詢
喜歡
$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貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
嘗試使用限制和偏移量進(jìn)行批量處理,如下所示
$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貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
您問(wèn)題中的代碼顯示表之間存在 one_to_one 或 one_to_many 關(guān)系,因此使用分頁(yè)和 join 語(yǔ)句可以解決該問(wèn)題。檢查下面的代碼希望有幫助
$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);
您可以在代碼中動(dòng)態(tài)設(shè)置 $offset 和 $limit 并繼續(xù)...

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您應(yīng)該收集數(shù)組中的所有 id,然后使用 IN 運(yùn)算符將所有 id 一次性傳遞給查詢,而不是使用循環(huán)并在其中提供 id。
示例:SELECT qty FROM inventory WHERE id IN (1,2,3,4,5)
. 通過(guò)這樣做,您可以避免循環(huán),并且您的代碼不會(huì)因超時(shí)錯(cuò)誤而退出。
或者
您可以在主查詢中使用子查詢來(lái)實(shí)現(xiàn)相同的效果
例子:SELECT qty FROM inventory WHERE id IN (SELECT id FROM item_masterfile)
- 4 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報(bào)