3

我有一系列单选按钮插入到数组中的数据库中。这第一次工作正常。

$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如果我需要用不同的变量更新多个值,我不明白我怎么能在最后得到。

4

3 回答 3

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

于 2012-04-18T21:00:07.947 回答
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);
于 2012-04-18T20:56:47.680 回答
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()。编辑:附加值函数以提取列的值。

自从我这样做以来已经有一段时间了,但我相信情况就是这样。

于 2012-04-18T20:51:14.123 回答