Я пытаюсь выполнить запрос 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' )