mysql - INSERT ... ON DUPLICATE KEY UPDATE,但不是真的......?

时间:2016-01-10 20:29:49

标签: mysql

您好我一直试图让它工作,我以为我有它与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);

希望对某人有意义,并提前感谢您的帮助!

1 个答案:

答案 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.也许您希望在应用程序层强制执行此操作。否则,您需要一个触发器或外键约束来确保只有三行。