我目前遇到的问题是,当两列(event_id和question_id)与另一行具有相同的值时,我需要插入或更新一行 例如,我有事件1和事件的问题2 现在,当已经插入的条目时,它应该将此更新为新值(已选择)
但我尝试的语法不起作用。你能帮我解决这个问题吗?
IF EXISTS (SELECT id as @info FROM votes WHERE event_id = 1 AND question_id = 2)
UPDATE votes SET selected='1,2,3' WHERE id=@info
ELSE
INSERT INTO `votes` (`id`, `event_id`, `question_id`, `selected`, `user_id`) VALUES (NULL, 1, 2, 3, 4)
答案 0 :(得分:0)
MySQL提供了一个方便的" ON DUPLICATE KEY UPDATE
"子句(也称为" upsert")。我认为这应该有效:
INSERT INTO `votes` (`event_id`, `question_id`, `selected`, `user_id`) VALUES
(1, 2, 3, 4)
ON DUPLICATE KEY UPDATE;
您需要确保UNIQUE
上存在(event_id, question_id)
约束。
答案 1 :(得分:0)
您的问题似乎表明,event_id
和question_id
配对在一起将是一个唯一索引,因此首先我们需要运行:
ALTER TABLE `votes` ADD UNIQUE `event_question`(`event_id`, `question_id`);
这将为我们提供一个独特的索引,使我们可以运行:
INSERT INTO `votes` (`event_id`, `question_id`, `selected`, `user_id`) VALUES (1, 2, 3, 4) ON DUPLICATE KEY UPDATE selected='1,2,3';
如果未找到对特定event_id
和question_id
的投票,则会插入新行。