2013-03-26 3 views
2

Я пытаюсь выполнить запрос INSERT INTO, когда клиент еще не имеет записи о покупке продукта.Условный 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

+0

Вы можете настроить 'UserID' и' Product' как уникальный ключ, а затем использовать один из «INSERT IGNORE», «REPLACE INTO» или «ON DUPLICATE KEY UPDATE». – MichaelRushton

+0

Я получаю следующую ошибку: –

ответ

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

И Я бы сказал, это * вероятно * идеально, если ваша схема позволяет это, потому что вы, вероятно, захотите, чтобы эти столбцы были индексированы для поиска в любом случае. – svidgen

+0

mysql не позволяет этого. * На альтернативе * – scones

+0

@scones Вы уверены? Ответчики на выбранный ответ, похоже, подтверждают, что он работает ... – svidgen

Смежные вопросы