添加多行并捕获未插入的行

时间:2015-07-10 19:09:08

标签: mysql pdo

我有一个包含两个(相关)列的表:referencecount。我想做一个可以添加多个引用的查询,并执行以下操作:

  • 如果我添加的引用不存在,请插入带有此引用及其计数的新行
  • 如果我正在添加的引用已经存在于表中,请不要插入新行,只需增加此引用的计数。

我考虑过这样做:

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)。

由于

1 个答案:

答案 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);