如何更新重复键上的多个列

时间:2012-04-18 20:42:32

标签: php mysql

我有一系列radiobuttons插入到数组中的数据库中。这在第一次工作正常。

$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或如何检查重复项,然后更新其value的每个note_id?这只是语法错误的情况吗?

修改

从答案到目前为止,似乎我不清楚我需要能够一次更新多个值。如果我需要使用不同的变量更新多个值,我不明白如何在最后得到ON DUPLICATE

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果您的主键是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);

答案 2 :(得分:0)

我相信你只指定一次ON DUPLICATE KEY UPDATE。像这样......

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(),我已经添加了。 编辑:添加值函数以获取列的值。

我已经这么做了一段时间,但我相信情况确实如此。