php - 如何更新重复键上的多列

标签 php mysql

我有一系列单选按钮,它们以数组的形式插入到数据库中。这在第一次通过时工作正常。

$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

关于php - 如何更新重复键上的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10217644/

相关文章:

php - 耗时和时区

mysql - 使用汉字命名 MySQL 表

php - 想要执行一个复杂的 Mysql 查询

php - 使用 updateOrInsert() 方法批量插入/更新并将数组转换为字符串

php - 按收藏夹表对 MySQL 表行进行排序

C++ unsigned long long range vs mysql unsigned bigint range

PHP 警告 : PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/php_curl.dll'

python - 具有 int 值的 SQLAlchemy order_by 字符串列

php - 如何从公用文件夹中获取图像文件作为 Laravel 中的响应?

php - 如何动态地将数据从数据库放到 session 中