【发布时间】:2012-08-29 03:07:35
【问题描述】:
在编写购物网站代码时,我需要更新产品库存。 但问题是,购物车自然可以有几次相同的物品。 更新它的最佳方法是什么?
我尝试了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);
}
【问题讨论】:
-
我觉得这个方法还可以。如果它们得到不同的值,你必须在循环中进行更新。
-
同意@MichaelBerkowski。除非您有明显的性能问题(例如,大量用户或大量产品/购物车),否则我会坚持使用您的方法。可以通过更巧妙的编码在单个查询中执行更新,但从长远来看,这将是一个复杂的解决方案,更难以维护。
-
您可能以前听说过,但请考虑迁移到支持预准备语句的更新 API,例如 MysQLi 或 PDO。这实际上会稍微提高循环的性能,并提高其他查询的安全性。
-
@MichaelBerkowski 这是我的第二个购物网站,网站流量让我感到害怕。那我就去吧。谢谢你。如果查询相同,我不知道 PDO。我可以改变它,但我现在不能。
-
唯一更好的解决方案是将购物车存储在数据库中。然后您可以通过加入表格来进行更新。
标签: php sql query-optimization