Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用具有多次出现项的数组更新sql值_Php_Sql_Query Optimization - Fatal编程技术网

Php 使用具有多次出现项的数组更新sql值

Php 使用具有多次出现项的数组更新sql值,php,sql,query-optimization,Php,Sql,Query Optimization,当我编写购物网站代码时,我需要更新产品库存。 但问题是,购物车自然可以有相同的项目几次。 更新它的最佳方式是什么 我在中尝试了,但下面的SQL查询返回3项 选择* 来自“产品” 何处id IN(3,4,4,6) 限制0,30 这是我的解决方案,但我不认为这是最好的 $cart = array(1,3,4,4,5,8,22,22); $itemlist = array_count_values($cart); foreach($itemlist as $itemid=>$ocurrenc

当我编写购物网站代码时,我需要更新产品库存。 但问题是,购物车自然可以有相同的项目几次。 更新它的最佳方式是什么

我在中尝试了
,但下面的SQL查询返回3项

选择*
来自“产品”
何处id
IN(3,4,4,6)
限制0,30
这是我的解决方案,但我不认为这是最好的

$cart = array(1,3,4,4,5,8,22,22);
$itemlist = array_count_values($cart);

foreach($itemlist as $itemid=>$ocurrence){
    $SQL = "UPDATE products SET stock = stock-".$ocurrence." WHERE id = ".$itemid;
    mysql_query($SQL);
}

您可以这样做:

SELECT * FROM menu WHERE item_id = 1
  UNION ALL
SELECT * FROM menu WHERE item_id = 1
  UNION ALL
SELECT * FROM menu WHERE item_id = 2
检查此链接:

如果可能,创建一个单独的项目购物车表,该表将(购物车id、项目id、产品id)作为主键。从这里,您可以根据产品id进行分组,查看产品的销售量

select product_id, count(product_id) as "No of Product Sold" from item_cart
group by product_id
您的php代码将完全更新库存商品的数量


如果可能的话,您可以尝试在销售任何产品时为UpdateIn stock列设置触发器。

我认为这种方法很好。如果他们得到不同的值,你必须在一个循环中进行更新。同意@MichaelBerkowski。除非您有明显的性能问题(例如,大量用户或大量产品/购物车),否则我将坚持您的方法。在一个查询中使用一个更聪明的编码来执行更新是可能的,但是从长远来看,这将是一个复杂的解决方案。您可能已经听说过,但是考虑到一个新的API,它支持准备好的语句,例如MyQuLi或PDO。这实际上会稍微提高循环的性能,并提高其他查询的安全性。@MichaelBerkowski,这是我的第二个购物网站,网站流量让我很害怕。那我就同意了。非常感谢。如果查询相同,我不知道PDO。我可以更改它,但目前无法更改。唯一更好的解决方案是将购物车存储在数据库中。然后可以通过连接表来进行更新。