2013-03-26 61 views
2

我試圖在客戶沒有購買產品的記錄時進行INSERT INTO查詢。有條件的插入MySQL - 不存在的地方

我已經嘗試了下面的SQL,但它似乎沒有工作。

$queryAddPurchase = "INSERT INTO purchase (UserID, Product, Price) 
       VALUES ('$userID', '$product', '$price') 
       WHERE NOT EXISTS(SELECT Product 
             FROM purchase 
         WHERE Product = '$product' 
         AND UserID = '$userID')"; 

錯誤我收到如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS(SELECT Product FROM purchase ' at line 3

任何意見將不勝感激!

+0

什麼意思當你說它不工作? – DevelopmentIsMyPassion 2013-03-26 21:21:22

+0

您可以將'UserID'和'Product'設置爲唯一鍵,然後使用'INSERT IGNORE','REPLACE INTO'或'ON DUPLICATE KEY UPDATE'中的一個。 – MichaelRushton 2013-03-26 21:21:25

+0

我收到以下錯誤: – 2013-03-26 21:23:20

回答

1

假設用戶只能購買每種產品(永遠和所有產品)中的一種。

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'); 

請注意,這會阻止他多次購買任何產品,這可能不是預期的結果。

1

如果可能,請在該表中添加一個UNIQUE約束。喜歡的東西...

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

而且你的條件刀片變得微不足道:

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

如果這是你一個合適的解決方案,使用選擇的答案在這裏:MySQL Conditional Insert

那回答,簡而言之:

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

而且我應該提到,如果你的模式允許的話,這可能是理想的,因爲你可能希望那些列索引爲lookup。 – svidgen 2013-03-26 21:28:04

+0

mysql不允許。*替代* – scones 2013-03-26 21:31:33

+0

@scones你確定嗎?在選定的答案評論家似乎證明,它的工作... – svidgen 2013-03-26 21:33:27