吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.aejguz.icu

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 271|回復: 4
上一主題 下一主題

[求助] MYSQL批量UPDATE的語句的問題

[復制鏈接]
跳轉到指定樓層
樓主
cqwcns 發表于 2019-10-4 13:12 回帖獎勵
在研究MYSQL批量UPDATE的語句,在網上找了一些資料來嘗試,不知道為什么無效,請幫忙看看,謝謝。

[SQL] 純文本查看 復制代碼
UPDATE `dizhi`

    SET `WangGe` = CASE id 
        WHEN 1 THEN 'test' 
        WHEN 2 THEN 'test1' 
        WHEN 3 THEN 'test2' 
    END
WHERE id IN (515652,515653,515654)



發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

沙發
一笑懸命桑 發表于 2019-10-4 13:27
oracle和sql還不一樣嗎   case when?你這when 1 when 2是什么條件
3#
Haisenan 發表于 2019-10-4 14:06
先說這種情況出現在用戶手里是不會發生的,只可以修改自己的,id自己添加錯了,那么你在后臺手動改了就行

    UPDATE yoiurtable
        SET WangGeID = CASE  id
            WHEN 515652 THEN test1
            WHEN 515653 THEN test2
            WHEN 515654 THEN test3
        END
    WHERE id IN (515652,515653,515654)

WHERE  部分的內容不會影響上面的執行,但是會提高sql效率。
4#
 樓主| cqwcns 發表于 2019-10-4 14:42 <
本帖最后由 cqwcns 于 2019-10-4 14:48 編輯
Haisenan 發表于 2019-10-4 14:06
先說這種情況出現在用戶手里是不會發生的,只可以修改自己的,id自己添加錯了,那么你在后臺手動改了就行
...

抱歉低級錯誤,分享一個親測牛B的函數。

[PHP] 純文本查看 復制代碼
$data = [
    ['id' => 1, 'parent_id' => 100, 'title' => 'A', 'sort' => 1],
    ['id' => 2, 'parent_id' => 100, 'title' => 'A', 'sort' => 3],
    ['id' => 3, 'parent_id' => 100, 'title' => 'A', 'sort' => 5],
    ['id' => 4, 'parent_id' => 100, 'title' => 'B', 'sort' => 7],
    ['id' => 5, 'parent_id' => 101, 'title' => 'A', 'sort' => 9],
];

/**
* 批量更新函數
* @Param $data array 待更新的數據,二維數組格式
* @param array $params array 值相同的條件,鍵值對應的一維數組
* @param string $field string 值不同的條件,默認為id
* @Return bool|string
*/
function batchUpdate($data, $field, $params = [])
{
   if (!is_array($data) || !$field || !is_array($params)) {
      return false;
   }

    $updates = parseUpdate($data, $field);
    $where = parseParams($params);

    // 獲取所有鍵名為$field列的值,值兩邊加上單引號,保存在$fields數組中
    // array_column()函數需要PHP5.5.0+,如果小于這個版本,可以自己實現,
    // 參考地址:http://php.net/manual/zh/function.array-column.php#118831
    $fields = array_column($data, $field);
    $fields = implode(',', array_map(function($value) {
        return "'".$value."'";
    }, $fields));

    $sql = sprintf("UPDATE `%s` SET %s WHERE `%s` IN (%s) %s", 'post', $updates, $field, $fields, $where);

   return $sql;
}

/**
* 將二維數組轉換成CASE WHEN THEN的批量更新條件
* @param $data array 二維數組
* @param $field string 列名
* @return string sql語句
*/
function parseUpdate($data, $field)
{
    $sql = '';
    $keys = array_keys(current($data));
    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) : '';
}
5#
樓主你好萌 發表于 2019-10-4 14:46
條件錯誤
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復非技術或與主題無關水貼,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-12 04:44

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
宝盈娱乐平台