使用数组更新sql值,该数组有几次出现的项目

时间:2012-09-04 12:45:11

标签: php sql query-optimization

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

我尝试IN,但以下SQL查询返回3项。

SELECT * 
FROM  `products` 
WHERE id
IN ( 3, 4, 4, 6 ) 
LIMIT 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);
}

2 个答案:

答案 0 :(得分:1)

您可以这样做:

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

检查此链接: MySQL table -> Can you return the same row multiple times, in the same query?

答案 1 :(得分:0)

如果可能的话,创建一个单独的item_cart表,它将(cart_id,item_id,product_id)作为主键。从这里你可以通过product_id进行分组,看看有多少产品没有销售。

select product_id, count(product_id) as "No of Product Sold" from item_cart
group by product_id

你的PHP代码将完全更新库存中的产品。

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