DELETE FROM RelationsAuthors WHERE MainId = :MainId AND AuthorId NOT IN (:authorarray)
上述代码将删除authorarry
内不存在MainId
等于特定值的所有内容。
删除后我想将authoarray
的值插入到数据库中,如果它们不存在而没有出现任何错误。
*使用foreach $_POST['AuthorId']
:
INSERT INTO RelationsAuthors (Id,MainId,AuthorId) VALUES('',:MainId,:AuthorId)
但是我想在我的代码中添加我需要INSERT只有WHERE(MainId =:MainId和AuthorId =:AuthorID)不存在。我怎么能这样做?
答案 0 :(得分:3)
首先,在两个字段上创建一个唯一索引,这样数据库就可以防止重复:
create unique index idx_RelationsAuthors_MainId_AuthorId on RelationsAuthors(MainId, AuthorId);
如果您有重复项,insert
将失败,并显示错误。您可以通过几种方式忽略此错误。我的首选方式是:
INSERT INTO RelationsAuthors (MainId, AuthorId)
VALUES(:MainId, :AuthorId)
ON DUPLICATE KEY UPDATE MainId = VALUES(MainId);
这将特别忽略重复键错误,但其他问题仍会产生错误(如果适用)。注意我删除了第一列。我从语法中猜测它是一个自动递增的ID,因此您根本不需要将其包含在insert
语句中。