我已经做了很多寻找这个问题,其中一些似乎可以工作,但只是有点偏。
如果相同的记录 已经存在,我正试图将此记录添加到数据库中。
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%确定它们中的任何一个对我有用(我确信会有一些东西会发生)。 / p>
答案 0 :(得分:2)
确保表格中有unique
个密钥以防止重复。然后在查询中使用语法INSERT IGNORE INTO
。如果存在重复,这将使它们无声地失败。
答案 1 :(得分:1)
尝试
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
)
答案 2 :(得分:1)
我这样做的首选方法是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
的优点是后者会忽略所有错误。第一个直接处理复制,但仍会产生其他无关的错误。