PHP批量更新数据

Posted Champion-水龙果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP批量更新数据相关的知识,希望对你有一定的参考价值。

/**
 * 批量更新函数
 * @param $data array 待更新的数据,二维数组格式
 * @param array $params array 值相同的条件,键值对应的一维数组
 * @param string $field string 值不同的条件,默认为id
 * @return bool|string 返回执行的SQL语句
 */
function batchUpdate($table_name,$data, $field, $params = [])
{
    if (!is_array($data) || !$field || !is_array($params)) {
        return false;
    }
    $updates = parseUpdate($data, $field);
    $where = parseParams($params);
    $fields = array_column($data, $field);
    $fields = implode(\',\', array_map(function ($value) {
        return "\'" . $value . "\'";
    }, $fields));
    return sprintf("UPDATE `%s` SET %s WHERE `%s` IN (%s) %s", $table_name, $updates, $field, $fields, $where);
}

/**
 * 将二维数组转换成CASE WHEN THEN的批量更新条件
 * @param $data array 二维数组
 * @param $field string 列名
 * @return string sql语句
 */
function parseUpdate($data, $field)
{
    $sql = \'\';
    $keys = array_slice(array_keys(current($data)), 1);
    foreach ($keys as $column) {
        $sql .= sprintf("`%s` = CASE `%s` \\n", $column, $field);
        foreach ($data as $line) {
            $sql .= sprintf("WHEN \'%s\' THEN \'%s\' \\n", $line[$field], $line[$column]);
        }
        $sql .= "END,";
    }
    return rtrim($sql, \',\');
}

/**
 * 解析where条件
 * @param $params
 * @return array|string
 */
function parseParams($params)
{
    $where = [];
    foreach ($params as $key => $value) {
        $where[] = sprintf("`%s` = \'%s\'", $key, $value);
    }
    return $where ? \' AND \' . implode(\' AND \', $where) : \'\';
}

  

以上是关于PHP批量更新数据的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP生成器批量更新数据

Mybaits的批量操作包括批量删除 批量增加和批量更新

Elasticsearch 部分批量更新

PHP怎样批量更新数据表中某字段的值?

超级有用的9个PHP代码片段

无法使用 ArrayObjectAdaptor 的 clear() 和 addAll() 刷新/更新浏览片段