我有一个包含两个(相关)列的表:reference
和count
。我想做一个可以添加多个引用的查询,并执行以下操作:
我考虑过这样做:
INSERT IGNORE INTO table (reference, count) VALUES ($ref1, $newquantity1), ($ref2, $newquantity2), ($ref3, $newquantity3) //etcaetera
// Here I'd catch the ignored rows ( = the references that are already in the table)
UPDATE table
SET count = CASE reference
WHEN '.$reference_already_present_1.' THEN 'count = count + '.$newquantity1.'
WHEN '.$reference_already_present_2.' THEN 'count = count + '.$newquantity2.'
//and so on for every reference already in the table
END
WHERE reference IN($reference_already_present_1, $reference_already_present_2);
(此更新查询来自here)
问题是,我不知道是否可以从第一次插入中捕获被忽略的行,如果是,那么该怎么做。有可能吗?
如果没有,我怎么能达到我的需要呢?
(如果它有任何相关性,我使用的是php,pdo和mysql)。
由于
答案 0 :(得分:2)
你想要insert . . . on duplicate key update
。但首先,您需要一个独特的索引:
create unique index idx_table_reference on table(reference);
insert into table(reference, count)
values($reference, $count)
on duplicate key update count = count + values(count);