MySQL 中实现数据的批量修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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并没有提供直接的方法来操作,大家可以看靠一下官方文档,不过是英文的仔细看一下哦

(官方文档:http://dev.mysql.com/doc/refman/5.7/en/update.html)

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 具体执行的方法就自己写了( ̄▽ ̄)" 
	}

本文出自 “追梦” 博客,请务必保留此出处http://dreameng.blog.51cto.com/1187899/1746917

以上是关于MySQL 中实现数据的批量修改的主要内容,如果未能解决你的问题,请参考以下文章

在sqlserver中实现树形结构中根、子节点数据的添加、修改

在片段中实现对话框时,必须在添加内容之前请求窗口功能

mysql数据批量更新,谢谢

在片段中实现 onClickListener

在多个片段中的片段中实现选项卡

尝试在片段中实现 OnClick 侦听器 [重复]