Условный INSERT INTO MySQL – НЕ СУЩЕСТВУЕТ

Я пытаюсь выполнить запрос INSERT INTO, когда клиент еще не имеет записи о покупке продукта.

Я попробовал следующий 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')"; 

Ошибка, которую я получаю, выглядит следующим образом:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с «WHERE NOT EXISTS (SELECT Product FROM purchase» в строке 3

Любой совет будет очень благодарен!

В предположении, что пользователь может покупать только один продукт (всегда и для всех продуктов).

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

Имейте в виду, что это не позволяет ему покупать какой-либо продукт несколько раз, что может и не быть желаемым результатом.

Если возможно, добавьте ограничение 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' )