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 ,會需要多次操作資料庫,因此效能較差
用迴圈批次執行 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 官方帳號,即時接收最新文章通知
留言
張貼留言