【发布时间】:2018-07-09 22:12:49
【问题描述】:
以下代码的预期行为是,对于每一行,它检查是否有重复,如果有,它会更新而不是插入。它分别为每一行执行此操作,这意味着为某一行查找重复项不会导致后续所有其他行的更新。唯一键是 member_id。
INSERT INTO table
(member_id, member_name, stat1, stat2) VALUES
('1', 'user1', '1411', '1410'),
('15', 'user2', '177', '179'),
('83', 'user3', '517', '832'),
('184', 'user4', '805', '1165'),
('304', 'user5', '708', '705')
ON DUPLICATE KEY UPDATE
stat1 = VALUES(stat1),
stat2 = VALUES(stat2)
然而,这似乎是从第一次发现 member_id 的重复键的那一刻起进行更新。
例如user2 已经存在,所以不要插入,而是执行更新。但随后它会为 user3、user4、user5 进行更新,即使它们可能不存在。这会导致以下错误:
Unknown column 'user3' in 'field list'
如何确保它检查每一行的重复项,如果没有重复项,则插入?
编辑: 我的查询更准确的 sn-p:
INSERT INTO reputation_p_month (member_id, member_name, january_2018_rep, acc_january_2018_rep) VALUES
('1', 'GreatJackal', '1411', '1410'),
('15', 'wetletus', '177', '177'),
('83', 'strongandbald', '517', '517'),
('14375', 'Newer', '0', '0'),
('14379', 'RobsenMeister', '0', '0'),
(14405, Griffin, 0, 0)
ON DUPLICATE KEY UPDATE
january_2018_rep = VALUES(january_2018_rep),
acc_january_2018_rep = VALUES(acc_january_2018_rep)
在控制台出现以下错误:
Uncaught SyntaxError: missing ) after argument list
'调试对象:更新 REP 记录时出错:'字段列表'中的未知列 'Griffin''
【问题讨论】:
-
尝试重写它而不使用“VALUES”,而是使用“SET”语法。 (一次一个)
-
很高兴你想通了 - StackOverflow 的“Syntax-Highligting”会告诉你,
Griffin被认为是列名而不是值 - 如果你发布了“真实”代码而不是伪代码——这是“偶然正确的”(假设)——我们可以更快地帮助你。:-) -
是的,我使用伪代码的原因是因为实际查询相当冗长,我错误地假设错误不在提供的值中。我的坏:P
标签: php mysql database insert rows