我有一系列单选按钮,这些单选按钮插入到数组中的数据库中。 这在第一次通过时工作正常。
$query="INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` ) VALUES ";
foreach ($params AS $key => $value) {
if (( $key != "form_key" ) && ( $key != "stylecolor" ) && ( $key != "key" )){
$values[] = "('$sku', '$key', '$value', NOW()) ";
}
}
$query .= implode(', ', $values) . ';';
我正在尝试让它在单选按钮的状态更改时更新这些列,因此更改了以下内容:
$values[] = "('$sku', '$key', '$value', NOW()) ON DUPLICATE KEY UPDATE value = '$value'";
如果使用此查询选择的数组中只有一个单选按钮,它将工作并更新:
INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` )
VALUES ('1893240720', '1', 'no', NOW())
ON DUPLICATE KEY UPDATE value = 'yes';
但是当我选择多个按钮时,它会中断查询:
INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` )
VALUES ('1893300667', '1', 'yes', NOW())
ON DUPLICATE KEY UPDATE value = 'no',
('1893300667', '2', 'yes', NOW())
ON DUPLICATE KEY UPDATE value = 'maybe';
我是否必须有单独的INSERT
,或者如何检查重复项,然后更新其各自note_id
的每个value
? 这只是语法错误的情况吗?
编辑
从到目前为止的答案来看,我似乎不清楚我需要能够一次更新多个值。 我不明白如果我需要使用不同的变量更新多个值,我怎么能在最后ON DUPLICATE
。
Zac,是的,您可以通过指定语句一次(在末尾)来执行此操作:
$query = "INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` ) VALUES ";
foreach ($params AS $key => $value) {
if (( $key != "form_key" ) && ( $key != "stylecolor" ) && ( $key != "key" )){
$values[] = "('$sku', '$key', '$value', NOW()) ";
}
}
$query .= implode(', ', $values) . 'ON DUPLICATE KEY UPDATE value = VALUES(value);';
看:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
如果您的主键是note_id,则
INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` )
VALUES ('1893300667', '1', 'yes', NOW())
ON DUPLICATE KEY UPDATE
`value` = 'no',
style_color = VALUES(style_color),
created_at = VALUES(created_at);
我相信
您只指定一次重复密钥更新。喜欢这个。。
INSERT INTO `notes_value` ( `style_color`, `note_id`, `value`, `created_at` )
VALUES ('1893300667', '1', 'yes', NOW()),
('1893300667', '2', 'yes', NOW())
ON DUPLICATE KEY UPDATE value = values(`value`);
编辑:忘记了我添加的第一个NOW()。编辑:附加值函数来提取列的值。
我已经有一段时间没有这样做了,但我相信情况确实如此。