我为这个问题做了很多工作,其中一些看起来可以工作,但只是有点偏离。
如果相同的记录不已经存在,我试图将此记录添加到数据库中。
mysql_query("INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount) VALUES ($UserID, $ProductID, 'Test Product', 100, 1)");
注意:该表中不存在唯一的列,2列合在一起形成唯一的记录。例如:1个UserID可以有2个ProductID, 1个ProductID可以同时有2个UserID
我试过了:
--(INSERT QUERY)-- WHERE NOT EXISTS (SELECT * FROM pmd_OrderData WHERE UserID=$UserID AND ProductID=$ProductID
我看过关于IGNORE
和REPLACE
的东西,但并不完全理解它们。
现在,似乎大多数方法都使用唯一的(主)键来完成这样的工作,所以我不能100%确定它们中的任何一个将如何为我工作(我确信会有一些东西)。
确保表中有一个unique
键,以防止重复。然后在查询中使用语法INSERT IGNORE INTO
。这将使它们在有重复的情况下静默失败。
Try
INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount)
SELECT $UserID, $ProductID, 'Test Product', 100, 1
from dual where not exists
(
select 1 FROM pmd_OrderData
WHERE UserID = $UserID AND ProductID = $ProductID
)
我的首选方法是on duplicate key update
:
INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount)
VALUES ($UserID, $ProductID, 'Test Product', 100, 1)
ON DUPLICATE KEY UPDATE UserId = VALUES(UserId);
但是,您需要一个唯一的键。我相信这个表的唯一键是UserId, ProductId
,所以定义:
create unique index idx_pmd_OrderData_2 on pmd_OrderData(UserId, ProductId);
on duplicate key update
相对于insert ignore
的优点是后者会忽略所有错误。第一个直接处理复制,但仍然会产生其他不相关的错误。