`

PHP中批量更新数据表中多条记录

    博客分类:
  • PHP
 
阅读更多

以下代码是PHP代码,由于出现错乱,所以借用java显示

 

class test {

    /**
     * 创建像这样的查询: "IN('a','b')";
     *
     * @author   wengxianhu
     * @created to 2013-05-27
     * @param    mix      $item_list      列表数组或字符串,如果为字符串时,字符串只接受数字串
     * @param    string   $field_name     字段名称
     * @return   void
     */
    public function db_create_in($item_list, $field_name = '')
    {
        if (empty($item_list))
        {
            return " ".$field_name . " IN ('') ";
        }
        else
        {
            if (!is_array($item_list))
            {
                $item_list = explode(',', $item_list);
                foreach ($item_list as $k=>$v)
                {
                    $item_list[$k] = intval($v);
                }
            }

            $item_list = array_unique($item_list);
            $item_list_tmp = '';
            foreach ($item_list AS $item)
            {
                if ($item !== '')
                {
                    $item_list_tmp .= $item_list_tmp ? ",'$item'" : "'$item'";
                }
            }
            if (empty($item_list_tmp))
            {
                return " ".$field_name . " IN ('') ";
            }
            else
            {
                return " ".$field_name . ' IN (' . $item_list_tmp . ') ';
            }
        }
    }

    /**
     * 拼接更新字段
     *
     * @author wengxianhu
     * @created to 2013-05-27
     * @param unknown $data 批量更新的数组
     * @param string $index_key 主键值的字段名
     * @return string
     */
    public function _concatFields($data, $index_key)
    {
        if (empty($data)) {
            return '';
        }
        $array_tmp = array();
        $index_key_array = array();
        if (!is_array(current($data))) {
            $data = array($data);
        }
        $tmp1 = "";
        foreach (current($data) as $_v => $_k) {
            $tmp1 = $_v . '_temp';
            ${$tmp1} = "";
            if ($_v != $index_key) {
                ${$tmp1} .= " {$_v} = CASE {$index_key} ";
            }
        }
        reset($data);
        $tmp2 = "";
        foreach ($data as $_k => $_v) {
            foreach ($_v as $_f => $_fv) {
                $tmp2 = $_f . '_temp';
                ${$tmp2} .= "WHEN '{$_v[$index_key]}' THEN '" . addslashes(stripslashes($_fv)) . "' ";
                array_push($index_key_array, $_v[$index_key]);
            }
        }
        reset($data);
        $tmp3 = "";
        foreach (current($data) as $_v => $_k) {
            $tmp3 = $_v . '_temp';
            ${$tmp3} .= " END ";
            if ($_v != $index_key) {
                $array_tmp[$tmp3] = ${$tmp3};
            }
        }
        $array_tmp[$index_key] = $this->db_create_in($index_key_array, $index_key);
        return $array_tmp;
    }

    /**
     * 拼接更新字段
     *
     * @author wengxianhu
     * @created to 2013-05-27
     * @param unknown $data 批量更新的数组
     * @param string $index_key 主键值的字段名
     * @return string
     */
    public function _concatFields_old($data, $index_key)
    {
        if(empty($data))
        {
            return '';
        }
        $array_tmp = array();
        $index_key_array = array();
        if(!is_array(current($data)))
        {
            $data = array($data);
        }
        foreach (current($data) as $_v => $_k)
        {
            if($_v != $index_key)
            {
                ${$_v.'_temp'} .= " {$_v} = CASE {$index_key} ";
            }
        }
        reset($data);
        foreach ($data as $_k => $_v)
        {
            foreach ($_v as $_f => $_fv)
            {
                ${$_f.'_temp'} .= "WHEN '{$_v[$index_key]}' THEN '".addslashes(stripslashes($_fv))."' ";
                array_push($index_key_array, $_v[$index_key]);
            }
        }
        reset($data);
        foreach (current($data) as $_v => $_k)
        {
            if($_v != $index_key)
            {
                ${$_v.'_temp'} .= " END ";
                $array_tmp[$_v.'_temp'] = ${$_v.'_temp'};
            }
        }
        $array_tmp[$index_key] = $this->db_create_in($index_key_array, $index_key);
        return $array_tmp;
    }

    /**
     * 获取更新的数据SQL
     *
     * @author wengxianhu
     * @created to 2013-05-27
     * @param unknown $data 批量更新的数组
     * @param string $index_key 主键值的字段名
     * @return multitype:
     */
    public function _getUpdateInfo($data, $index_key)
    {
        reset($data);
        $fields = array();
        $conditions = array();
        $fields_info = $this->_concatFields($data, $index_key);
        $conditions = $fields_info[$index_key];
        unset($fields_info[$index_key]);
        $fields = implode(',', $fields_info);
        return compact('fields', 'conditions');
    }

    /**
     * 批量更新数据
     *
     * @author wengxianhu
     * @created to 2013-05-27
     * @param unknown $set 批量更新的数组
     * @param string $table 数据表名
     * @param string $index_key 主键值的字段名
     * @return void
     */
    public function updateAll($set, $table, $index_key)
    {
        if(empty($set))
        {
            return '';
        }
        $update_info = $this->_getUpdateInfo($set, $index_key);
        $sql = "UPDATE {$table} SET {$update_info['fields']} WHERE {$update_info['conditions']}";
        $this->query($sql,'execute'); //这里根据当前使用的系统修改
    }
}

$goods = array(
    array('goods_id'=>2000,'cate_id'=>100,'name'=>'godos1'),
    array('goods_id'=>2001,'cate_id'=>101,'name'=>'godos2'),
    array('goods_id'=>2002,'cate_id'=>102,'name'=>'godos3'),
);
// $goods = array('goods_id'=>2000,'cate_id'=>100,'name'=>'godos1');
$a = new test();
$a->updateAll($goods, 'ecm_goods', 'goods_id');

 

分享到:
评论
3 楼 风尘之驿 2013-05-31  
junbin007 写道
61行。。莫非这是一种神奇的语法

是那编辑器的问题,我写empty,但显示确是emptyempty了,你懂得
2 楼 junbin007 2013-05-28  
61行。。莫非这是一种神奇的语法
1 楼 junbin007 2013-05-28  
39行,你懂的

相关推荐

    PHP中批量插入多条记录到数据表

    NULL 博文链接:https://itxiaohu.iteye.com/blog/1876794

    Thinkphp批量更新数据的方法汇总

    主要介绍了Thinkphp批量更新数据的方法汇总的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    php批量添加数据与批量更新数据的实现方法

    设计方法:同时提交多条表单记录,为每一条记录设置相同的文本域名称,然后在表单处理页中,通过for循环来读取提取表单提交的数据,最后以数据的形式将数据逐条添加到数据库中. 其中,应用一个count()函数来获取数组中元素...

    PHP程序开发范例宝典III

    实例227 使用聚集函数First或Last求数据表中第一条或最后一条记录 352 8.10 多表查询 354 实例228 使用select语句进行多表查询 354 实例229 使用表的别名 355 实例230 合并多个结果集 356 8.11 嵌套查询...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    MySQL5 权威指南第3版中文版_part1

     10.11 对前n条或后n条记录进行处理  10.12 以随机方式选择数据记录  10.13 全文索引  10.14 锁定  10.15 事务  第11章 访问权限与信息安全  11.1 简介  11.2 急救  11.3 访问控制机制的内部工作原理  ...

    五指CMS v2.01简体中文GBK.zip

    五指CMS本次系统主要更新一下内容(20150519) 1、php5.4以上环境,部分程序不能安装的问题。 五指CMS本次系统主要更新一下内容(20150518): − 支持php5.2、php5.3、php5.4、php5.5、php5.6!(推荐使用5.4或...

    XISE WBMS管理 V8.86 破解版

    更新日志- XISE已经很久没有再更新,感谢大家的支持 ...智能的记录数据,急速百万条记录读取,百万级SHELL轻松管理 点击图片即可查看,无需下载 支持批量的导入与导出 更多功能细节请查看历史更新记录

    积分换礼 1.8

    下个版本将支持指定调用数据的条数。后台可以设置兑换所花费的积分类型和各种提示信息。 上传礼品图片自动生成前台缩略图。 上传礼品可以不上传图片。内置无图片功能。 每位会员兑换数量限制功能。 批量标记发货,...

    风越.net代码生成器 v3.5

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

    PHP168建站系统

    备份数据库的界面增加每个数据表的功能介绍,让大家清楚知道哪个数据表是做什么用的. 29.增强完善后台在线修改模板风格功能,对常用的模板都做了功能解释说明.方便大家修改对应的模板 等等.... 官方网站:...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

    MySQL 5权威指南(第3版) 中文版 下载地址

     10.11 对前n条或后n条记录进行处理  10.12 以随机方式选择数据记录  10.13 全文索引  10.14 锁定  10.15 事务  第11章 访问权限与信息安全  11.1 简介  11.2 急救  11.3 访问控制机制的内部工作...

    风越.net代码生成器v2.9

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

    风越asp代码生成器 V3.5

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

    风越ASP代码生成器2.8

    16、提供多种灵活翻页方案,用户可设置每页记录条数、上/下页、前/后N页、输入数字跳转到指定页面等,提高海量数据翻页速度 17、提供丰富的建站常用VB、JS函数库 ★ 18、更多扩展功能: 添加、修改页面在保存信息前...

Global site tag (gtag.js) - Google Analytics