Hi Overflowers(长期潜伏者,第一次问题兼容者),
使用以下mySQL查询:
INSERT INTO table (col_a,col_b,col_c,col_d) VALUES (val_a,val_b...val_x) ON DUPLICATE KEY UPDATE col_d = VALUES(col_d)
鉴于mySQL报告:
我唯一的数字是:
是否有任何数学(或其他)魔法能够可靠地返回插入的数量,更新和跳过的行(重复)?
对于奖励积分,如果不能正确计算插入次数,更新和重复次数仅给出这两个数字(行数和受影响的行),是否有更好的(性能方面)方式而不是简单地在"插入重复密钥更新"之前和之后查询表中的行数。查询?
请注意我已尝试接受的答案和Getting number of rows inserted for ON DUPLICATE KEY UPDATE multiple insert?
上列出的其他公式但是这些似乎在基本测试中失败了,例如:
总共10行,2个插入,2个更新,6个重复=总共10行,6个受影响的mysql行
(10 * 2 = 20) - 6 = 14个插入(对于接受的答案)?或者,
6 - 10 = -4次更新(第二个答案中的等式3)?
(另请注意,"插入忽略"以及"替换为"查询是适合的替换查询,以换出"插入重复键更新& #34;在此特定实例中进行查询。)
干杯。
答案 0 :(得分:2)
如果没有更多信息,我认为这是不可能的 - 仅仅是您要插入的行数和受影响的行数还不够。
mysqli->info
会返回一个有用的字符串,该字符串也提供重复计数 - 我们可以从中计算出其余部分。
list($rec, $dupes, $warns) = sscanf($mysqli->info, "Records: %d Duplicates: %d Warnings: %d"); // courtesy of user at big lake dot com - php.net
$inserts = $total_rows_affected - ($dupes * 2);
$updates = ($total_rows_affected - $inserts)/2;
$skipped = $rec - ($inserts + $updates);
$total = $rec;