mysql update 批量修改数据_MySQL 中实现数据的批量修改

今天遇到一个数据的批量更新,查了一下官方文档,还好找到了。英文东东,大家耐心哈

http://dev.mysql.com/doc/refman/5.7/en/update.html

一般在使用数据编辑的时候:

UPDATE tablename SET field_1='value', field_2='value'[...] WHERE condition_field= 'value'

或者UPDATE tablename SET field_1='value', [field_2...] where condition_field in ('values')

如果更新多条数据为不同的值,怎么做呢?

可能大部分人会这么写:foreach($conditions as $field => $value){

$sql = "UPDATE tablename SET field = $value WHERE id = $id";

mysql_query($sql);

}

这样进行一条一条数据进行更新,这样的效率比较低。

有没有一条sql来进行操作的呢?其实mysql并没有提供直接的方法来操作,大家可以看靠一下官方文档,不过是英文的仔细看一下哦UPDATE tablename SET

field = CASE id

WHERE 1 THEN 'value'

WHERE 2 THEN 'value'

END

WHERE id in (1,2,3)

更新多个字段呢?UPDATE tablename SET

field_1 = CASE id

WHERE 1 THEN 'value'

WHERE 2 THEN 'value'

END,

field_2 = CASE id

WHERE 1 THEN 'value',

WHERE 2 THEN 'value'

END

WHERE id in (1,2,3)

思路大致就是这样的,如果是PHP那么可以参考一下写的方法:/**

* 批量更新数据,必须是二位数组

*

* @param array $data 需要跟新的数据

* 比如:$data['字段名称']['主键ID']=>'value'

*

* @return boolean

*/

public function updateAll($data, $dbname) {

if (empty($data)) {

return false;

}

$sql = "UPDATE ".$dbname." SET ";

$total = count($data);

$i = 1;

$idsArr = array();

foreach ($data as $field => $val) {

$sql .= " $field = CASE id ";

foreach ($val as $id => $v) {

$sql .= sprintf(" WHEN %d THEN '%s' ", $id, $v);

if (!in_array($id, $idsArr)) {

$idsArr[] = $id;

}

}

if ($i == $total) {

$sql .=" END ";

} else {

$sql .=" END, ";

}

$i++;

}

$ids = implode(',', $idsArr);

$sql .= " WHERE id IN ($ids)";

//TODO 具体执行的方法就自己写了( ̄▽ ̄)"

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值