【问题标题】:Inserting new record or updating record by updating a value通过更新值插入新记录或更新记录
【发布时间】:2019-10-17 09:10:22
【问题描述】:

我有一个购物车表。用户可以将产品添加到购物车。我正在使用 php 添加或插入记录。

购物车表包括:

CartID, CartProductID, CartQty, CartPrice, CartUserID

现在用户不能再次在购物车表上添加相同的产品,而是应该更新 CartQty 的值(如果产品存在)。这种更新的sql可以是什么?

如果产品已经存在于购物车中或不存在,我可以创建多个按钮并使用隐藏和显示 javascript。

数据示例:

CartID, CartProductID, CartQty, CartPrice,CartUserID

1, 10, 1, 100, 4

2, 11, 2, 150, 4

现在如果一个用户 ID 为 4 的用户想再次将 ProductID 10 添加到购物车中,那么 CartQty 值应该根据数量输入字段相加。

如果输入字段数量为 3,则第一条记录应更新为:

1, 10, 4, 100, 4

【问题讨论】:

  • 分享您在购物车中添加产品的代码
  • 这没有意义。您通常不会将用户 ID 和购物车的内容存储在同一个表中。

标签: mysql sql


【解决方案1】:

一个有效模式的例子可能有点如下:

cart
 cart_id *
 user_id
 expiry_date

cart_detail
 cart_id *
 product_id *
 quantity

product
 product_id *
 date *
 price

* = (component of) PRIMARY KEY

【讨论】:

    【解决方案2】:

    试一试,在 SQL 中,假设 @CartProductID = 10 和 @CartQty =1

    IF NOT EXISTS(SELECT 1 FROM Table1 WHERE CartProductID=@CartProductID)
    BEGIN
        INSERT INTO Table1 (CartID, CartProductID, CartQty, CartPrice,CartUserID)
        VALUES (1, 10, 1, 100, 4)
    END
    ELSE
    BEGIN
        UPDATE Table1 SET CartQty=CartQty+@CartQty WHERE CartProductID=@CartProductID
    END
    

    【讨论】:

    • 好吧,我不会这样做。
    【解决方案3】:

    在 MySQL 中,您可以使用 ON DUPLICATE KEY UPDATE 子句在 INSERT 中创建正确的 UNIQUE 子句,根据我的说法,它应该是 CartID, CartProductID, CartUserID

    有关ON DUPLICATE KEY的更多信息,请参阅https://mariadb.com/kb/en/library/insert-on-duplicate-key-update/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2020-07-19
      • 2015-08-14
      • 1970-01-01
      • 2015-10-13
      • 2014-11-14
      相关资源
      最近更新 更多