Php 有条件地插入MySQL-不存在的地方
当客户还没有购买产品的记录时,我尝试在查询中插入 我尝试了下面的SQL,但似乎不起作用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
$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上测试过。它起作用了。插入州名称,从不存在的双精度中选择“威斯康星州”,从名称为“威斯康星州”的州中选择名称;