2

顧客がまだ製品を購入した記録を持っていないときに、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 構文にエラーがあります。3行目の「WHERE NOT EXISTS(SELECT Product FROM purchase」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

どんなアドバイスでも大歓迎です!

4

2 に答える 2

1

ユーザーが各製品を 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');

これにより、彼は製品を複数回購入することができなくなり、望ましい結果ではない可能性があることに注意してください.

于 2013-03-26T21:23:32.083 に答える
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'
        )
于 2013-03-26T21:24:18.853 に答える