Conditional INSERT INTO MySQL - WHERE NOT EXISTS

后端 未结 2 1014
忘了有多久
忘了有多久 2020-12-21 18:51

I am trying to do an INSERT INTO query when the customer does not already have a record of purchasing a product.

I have tried the below SQL, but it doesn\'t seem to

相关标签:
2条回答
  • 2020-12-21 19:19

    If possible, add a UNIQUE constraint to the table. Something like ...

    alter table purchase add unique user_product (UserID, ProductID);
    

    And your conditional insert becomes trivial:

    INSERT IGNORE INTO purchase (UserID, Product, Price) 
        VALUES ('$userID', '$product', '$price')
    

    If this is not a suitable solution for you, use the selected answer here: MySQL Conditional Insert

    That answer, in brief:

    INSERT INTO purchase (UserID, Product, Price) 
        SELECT '$userID', '$product', '$price'
        FROM dual
            WHERE NOT EXISTS (
                SELECT * FROM purchase
                WHERE UserID='$userID'
                    AND ProductID='$product'
            )
    
    0 讨论(0)
  • 2020-12-21 19:36

    On the assumption, that a user may only buy one of each product (ever and for all products).

    ALTER TABLE purchase ADD UNIQUE KEY (`UserID`, `Product`); -- run this just once. this changes the table
    
    INSERT IGNORE INTO purchase (UserID, Product, Price) VALUES ('$userID', '$product', '$price');
    

    Be aware, that this then prevents him from buying any product multiple times, which might not be the desired outcome.

    0 讨论(0)
提交回复
热议问题