【问题标题】:updating sql values with array which have a couple times occured items用数组更新 sql 值,该数组有几次出现的项目
【发布时间】: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


【解决方案1】:

如果可能,创建一个单独的 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 代码将完美地更新库存列中的所有产品。

如果可能,您可以尝试在任何产品售出时为更新库存列设置触发器。

【讨论】:

    【解决方案2】:

    你可以这样做:

    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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多