今天遇到一个数据的批量更新,查了一下官方文档,还好找到了。英文东东,大家耐心哈
http://dev.mysql.com/doc/refman/5.7/en/update.html
一般在使用数据编辑的时候:
1
UPDATE tablename SET field_1='value', field_2='value'[...] WHERE condition_field= 'value'
或者
1
UPDATE tablename SET field_1='value', [field_2...] where condition_field in ('values')
如果更新多条数据为不同的值,怎么做呢?
可能大部分人会这么写:
1
2
3
4
foreach($conditions as $field => $value){
$sql = "UPDATE tablename SET field = $value WHERE id = $id";
mysql_query($sql);
}
这样进行一条一条数据进行更新,这样的效率比较低。
有没有一条sql来进行操作的呢?其实mysql并没有提供直接的方法来操作,大家可以看靠一下官方文档,不过是英文的仔细看一下哦
(官方文档:http://dev.mysql.com/doc/refman/5.7/en/update.html )
1
2
3
4
5
6
UPDATE tablename SET
field = CASE id
WHERE 1 THEN 'value'
WHERE 2 THEN 'value'
END
WHERE id in (1,2,3)
更新多个字段呢?
1
2
3
4
5
6
7
8
9
10
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那么可以参考一下写的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* 批量更新数据,必须是二位数组
*
* @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 具体执行的方法就自己写了( ̄▽ ̄)"
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com