使用mysql 自带的语句构建 多个更新条件 批量更新

来源:互联网 发布:歌莉娅淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/17 12:56

使用mysql 自带的语句构建 多个更新条件 批量更新

    /**     * 批量修改     * @param string $table_name 表名     * @param array $data        提交的数据 array     * @param string $field      修改的条件字段 支持多条件修改 可用逗号分隔,或者数组     * @return bool|int          返回修改的条数     */    public static function batch_update($table_name = '', $data = [], $field = '')    {        if (!$table_name || !$data || !$field) {            return false;        } else {            $sql = 'UPDATE ' . $table_name;        }        $con = [];        $con_sql = [];        $fields = [];        if (!is_array($field)) {            $field = explode(',', $field);        }        foreach ($data as $key => $value) {            $x = 0;            foreach ($value as $k => $v) {                $con_sql[$x] = isset($con_sql[$x]) ? $con_sql[$x] : '';                if (!in_array($k, $field) && !isset($con[$x]) && $x == 0) {                    $con[$x] = " SET `" . $k . "` = (CASE ";                    $con_sql[$x] = '';                } elseif (!in_array($k, $field) && !isset($con[$x]) && $x > 0) {                    $con[$x] = " `" . $k . "` = (CASE ";                }                if (!in_array($k, $field)) {                    $con_sql[$x] .= " WHEN ";                    foreach ($field as $i => $val) {                        $temp = $value[$val];                        if ($i > 0) {                            $con_sql[$x] .= " AND `" . $val . "` = " . $temp;                        } else {                            $con_sql[$x] .= " `" . $val . "` = " . $temp;                        }                    }                    $con_sql[$x] .= " THEN '" . $v . "'";                    $x++;                }            }            foreach ($field as $fk => $fv) {                $fields[$fv] = isset($fields[$fv]) ? $fields[$fv] : [];                $temp = $value[$fv];                if (!in_array($temp, $fields[$fv])) {                    $fields[$fv][] = $temp;                }            }        }        $num = count($con) - 1;        foreach ($con as $key => $value) {            foreach ($con_sql as $k => $v) {                if ($k == $key && $key < $num) {                    $sql .= $value . $v . ' END),';                } elseif ($k == $key && $key == $num) {                    $sql .= $value . $v . ' END)';                }            }        }        $sql .= " WHERE ";        $i = 0;        foreach ($fields as $fsk => $fsv) {            if ($i > 0) {                $sql .= " AND " . $fsk . " IN (" . implode(',', $fsv) . ")";            } else {                $sql .= $fsk . " IN (" . implode(',', $fsv) . ")";            }            $i++;        }        $res = Db::name($table_name)->execute($sql);        return $res;    }

最后返回的$sql就是组合后的批量修改的sql语句,上文中用 thinkphp 5 提交sql,并返回处理的条数,可以根据自己情况改变改代码

$res = Db::name($table_name)->execute($sql);return $res;
原创粉丝点击