Php 有条件地插入MySQL-不存在的地方

Php 有条件地插入MySQL-不存在的地方,php,mysql,sql-insert,Php,Mysql,Sql Insert,当客户还没有购买产品的记录时,我尝试在查询中插入 我尝试了下面的SQL,但似乎不起作用 $queryAddPurchase = "INSERT INTO purchase (UserID, Product, Price) VALUES ('$userID', '$product', '$price') WHERE NOT EXISTS(SELECT Product

当客户还没有购买产品的记录时,我尝试在查询中插入

我尝试了下面的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服务器版本相对应的手册,了解第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');

请注意,这会阻止他多次购买任何产品,这可能不是期望的结果。

如果可能,请在表中添加唯一的约束。类似于

alter table purchase add unique user_product (UserID, ProductID);
您的条件插入变得微不足道:

INSERT IGNORE INTO purchase (UserID, Product, Price) 
    VALUES ('$userID', '$product', '$price')
如果这不是适合您的解决方案,请使用此处选择的答案:

简言之,答案是:

INSERT INTO purchase (UserID, Product, Price) 
    SELECT '$userID', '$product', '$price'
    FROM dual
        WHERE NOT EXISTS (
            SELECT * FROM purchase
            WHERE UserID='$userID'
                AND ProductID='$product'
        )

当你说它不工作是什么意思?你可以将UserID和Product设置为唯一密钥,然后使用INSERT IGNORE、REPLACE INTO或ON replicate key UPDATE中的一个。我收到以下错误:你的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第3行“WHERE NOT exists select Product FROM purchase”(不存在的地方从购买中选择产品)附近要使用的正确语法。请注意问题中的错误,我应该提到,如果您的模式允许,这可能是理想的,因为您可能希望为这些列编制索引,以便进行查找。mysql不允许这样做。上alternative@scones你确定吗?对所选答案的评论似乎证明它是有效的…@swidgen发现了我的错误,那里的答案是正确的。通过双重的魔力来工作+1给你:@scones刚刚在MySQL 5.1上测试过。它起作用了。插入州名称,从不存在的双精度中选择“威斯康星州”,从名称为“威斯康星州”的州中选择名称;