IF函數
IF(expr,v1,v2):如果表達式expr成立,那么返回v1,否則返回v2
例如:在table1
中type
字段存在值為-1
的記錄,現在對table1
進行查詢,如果該字段值為-1
,就變為0
,其他值不改變。
SELECT IF(type=-1, 0, type) as type FROM table1;
CASE語句
CASE case_value
WHEN when_value THEN
statement_list
ELSE
statement_list
END alias;
對case_value進行判斷,根據case_value滿足的條件返回結果,並重命名為alias。
SELECT CASE type WHEN 1 THEN '蘋果' WHEN 2 THEN '香蕉' ELSE '梨' END type FROM table1;
在TP鏈式查詢中使用上述邏輯
-
IF函數
例如:在
table1
中type
字段存在值為-1
的記錄,現在對table1
進行查詢,如果該字段值為-1
,就變為0
,其他值不改變,並將結果存到table2
。//連接到數據庫,假設連接為local //... //讀取數據 $reslut = $local ->name('table1') //使用table1 ->field('IF(type=-1, 0, type) as type') ->select(); //向table2中插入數據 //true參數:如果找到了相同的主鍵記錄,就進行更新 $local->name('table2')->insertAll($result, true);
- 當需要進行大量判斷的時候,更推薦在代碼中進行判斷。在數據庫進行判斷,將會增大數據庫服務器的壓力。所以,上述例2,可以使用下面的方式。
//連接到數據庫,假設連接為local //... //讀取數據 $result = $local ->name('table1') ->field('type') ->select(); //處理數據 foreach ($result as &$type) { switch ($type['type']) { case 1: $type['type'] = '蘋果'; break; case 2: $type['type'] = '香蕉'; break; case 3: $type['type'] = '梨'; break; default: break; } unset($type); } //向table2中插入數據 $local->name('table2')->insertAll($reslut, true);
在上面的例子中,處理數據的時候,使用了引用傳遞&$type,如果不使用引用傳遞,$result是不會改變的。同時,還要注意的是,這里對每個遍歷出來的$type進行了unset操作。這是很重要的一點,引用傳遞之后,要記得進行unset,將該變量與內存地址的綁定切斷,這樣才能在垃圾回收(GC)的時候,將其回收掉。