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 粉絲專頁 (上)

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

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