我有以下查询更新特定供应商的产品库存。
UPDATE
ps_stock_available AS sa
INNER JOIN
ps_product AS p
ON
p.id_product = sa.id_product
SET
sa.quantity = 0,
p.quantity = 0
WHERE
p.id_supplier = 18
该查询适用于产品数量较少的供应商,但供应商超过1k产品时会遇到问题。
/Lost connection to MySQL server during query/
我无法访问配置文件,因此我正在寻找一种方法来减少处理所需的时间。
有没有办法减少所需的时间或多批次更新产品?如果有人熟悉它,我会使用prestashop CMS。
答案 0 :(得分:0)
我自己解决了这个问题。
我没有尝试直接更新两个表,而是批量更新数据库。
以下代码在PHP中编写:
选择符合我更新条件的所有ID(连接到数据库,执行查询)
select ps_product.id_product FROM ps_product
INNER JOIN ps_stock_available on ps_product.id_product=ps_stock_available.id_product
WHERE ps_product.id_supplier=18
将ID写入数组
$i=0;
$id;
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$id[$i]=$row["id_product"];
$i++;
}
} else {
echo "No products with chosen supplier in database.";
}
在循环遍历数组时,我正在为每个ID&创建特定的UPDATE查询。执行它们。
$arrlength = count($id);
for($x = 0; $x < $arrlength; $x++) {
$sql2=
"
UPDATE ps_stock_available
SET
quantity=0
WHERE id_product=".$id[$x]."
";
if ($conn->query($sql2) === TRUE) {
echo $x.", ";
}
每次我更新数据库时检查mysql连接可能是明智的,只是为了确保它不会断开连接,但它现在可以工作。 :)
答案 1 :(得分:0)
尝试更新&#39;连接读取超时&#39;的值在你的MySQL服务器上。
更改MySQL配置文件中的默认值(mysqld部分中的选项connect_timeout) -
[mysqld]
connect_timeout=100
如果您无法访问此文件,则可以使用此语句设置此值 -
SET GLOBAL connect_timeout=100;
尝试将值设置为超过当前值的某个值,看看它是否有效,如果没有,请尝试增加该值。