精選文章

2021 年 1 月熱門電子書推薦 | 精選書籍推薦

圖片
2021 年1 月推薦書籍:一起來閱讀增進知識吧,挑戰看看這個月能看幾本!或是有其他推薦書籍也歡迎分享~ 全身激痛點地圖 (電子書) 出版日期:2020/04/21 作者:侯鐘堡 推薦指數:⭐⭐⭐⭐ 失眠的年代:即刻救援你的睡眠,不睡這個殺手就在你身邊 (電子書) 出版日期:2020/12/16 作者:許承翰,高紅敏 推薦指數:⭐⭐⭐⭐ 病從排寒解2 排寒實踐與突破:20年臨床實證,突破排寒盲點,防治疫毒流感的中醫養命方略! (電子書) 出版日期:2020/12/05 作者:李璧如 推薦指數:⭐⭐⭐⭐ 身體的立體結構網絡:一個結構治療科醫師的筆記 (電子書) 出版日期:2020/11/01 作者:林兩傳 推薦指數:⭐⭐⭐⭐ 1個月-7kg 奇蹟蛋白質減重法 (電子書) 出版日期:2020/12/29 作者:土田隆 推薦指數:⭐⭐⭐⭐ 人類使用說明書 (電子書) 出版日期:2020/11/26 作者:卡蜜拉‧彭 推薦指數:⭐⭐⭐⭐ 0負擔天文課:輕薄短小的109堂課,變身一日太空人 (電子書) 出版日期:2020/11/16 作者:侯東政 推薦指數:⭐⭐⭐⭐⭐ 我們為何吃太多?全新的食慾科學與現代節食迷思 (電子書) 出版日期:2020/12/30 作者:安德魯‧詹金森 推薦指數:⭐⭐⭐⭐ 只有一半的真相:為什麼科學看不到全貌? (電子書) 出版日期:2020/11/30 作者:布拉斯藍德 推薦指數:⭐⭐⭐⭐⭐ ...

CodeIgniter 查詢生成器 - update_batch 介紹




CodeIgniter 是一個 php 的 framework,最近使用的心得,我覺得是一套輕巧、容易上手的framework,今天想來介紹 CodeIgniter ( 以下簡稱 CI ) 查詢生成器的 function - update_batch。

查詢生成器

查詢生成器可以讓開發者用較少的程式碼來對資料庫進行操作,另外也可以讓查詢較為安全,系統會自動跳脫值。

我自己認為相比於直接 query ,使用查詢生成器的可讀性比較高,開發上有時看到很長一串的query,我認為是較不好閱讀,舉例來說:

直接寫 query 語句
$this->db->query("SELECT * FROM TABLE WHERE a=1 AND b=2 LIMIT 1")->row_array();

由 CI 建構查詢語句
$this->db->select("*"); // 可省略
$this->db->where("a", 1);
$this->db->where("b", 2);
$this->db->limit(1);
$this->db->get("TABLE")->row_array();

遇到需要對資料庫大量更新的狀況時

效能最差的方法
用迴圈批次執行 query ,會需要多次操作資料庫,因此效能較差
$array1 = [1, 2, 3, 4];
foreach ($array1 as $key => $value) {
    $data = array(
        'num' => $value,
        'name' => 'test',
    $this->db->where("id", $value);
    $this->db->update("table", $data);
}

使用 update_batch 方法
用法是 $this->db->update_batch('table_name', $data, 'column_name');
其中 $data 為 array,裡面有 update 所需要的資料欄位及值。把上面的程式碼改寫:

$array1 = [1, 2, 3, 4];
foreach ($array1 as $key => $value) {
    $data = array(
        'id' => $value,
        'num' => $value,
        'name' => 'test',
    );
}
$this->db->update_batch("table", $data, "id");

使用此方法效能較好的原因在於,CI 會產生下面的 query,基本上也只對資料庫做一次操作。

UPDATE `table` SET `num` CASE
WHEN `id` = 1 THEN 1
WHEN `id` = 2 THEN 2
WHEN `id` = 3 THEN 3
WHEN `id` = 4 THEN 4
ELSE `num` END, `name` CASE
WHEN `id` = 1 THEN 'test'
WHEN `id` = 2 THEN 'test'
WHEN `id` = 3 THEN 'test'
WHEN `id` = 4 THEN 'test'
ELSE `name` END
WHERE `id` IN (1,2,3,4)



如果喜歡我的文章,想隨時收到最新行銷、技術分享,歡迎按 fb 粉專讚

加入好友  或加入 LINE 官方帳號,即時接收最新文章通知

留言

這個網誌中的熱門文章

自動將 Blogger 文章發佈到 facebook 粉絲專頁 (上)

使用 docker 部署 Python Flask | 心得分享

3 步驟獲取Google Play 中APP數據 - Python 爬蟲