您好我一直试图让它工作,我以为我有它与mysql - INSERT ...在DUPLICATE KEY UPDATE,但没有运气。
我有一张桌子:
sessionID是唯一的, productID引用另一个表并且不是唯一的,但不常见,应该是包含相同值的最多3行, sessionType为1,2或3,并将与productID链接,
我需要检查表是否有一行,其中有一对匹配的productID和sessionType,如果有sessionDate&该行中的sessionCapacity应该是UPDATED,如果没有,则插入一个新行。
$vals = array($pID,$data['pSessionDate'],'1',$data['pQty'],$pID,$data['pSessionDate'],'1',$data['pQty']);
$db->Execute("INSERT INTO VividStoreSessions (pID,sDate,sType,sCapacity) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE pID=?,sDate=?,sType=?,sCapacity=?",$vals);
希望对某人有意义,并提前感谢您的帮助!
答案 0 :(得分:2)
您的插入内容有效。但是,首先您需要一个唯一的索引/约束:
create unique index unq_VividStoreSessions_productId_sessionType
on VividStoreSessions, productId, sessionType)
然后你可以编写代码只使用四个参数:
INSERT INTO VividStoreSessions (pID, sDate, sType, sCapacity)
VALUES (? ,?, ?, ?)
ON DUPLICATE KEY UPDATE sDate = VALUES(sDate), Capacity = VALUES(Capacity);
最后,您需要确保sType
仅采用值1,2或3.也许您希望在应用程序层强制执行此操作。否则,您需要一个触发器或外键约束来确保只有三行。