Mysql IFNULL操作
項目中用到的,當SQL查詢某個字段為空的時候,查詢結果中設置其值為默認值。最笨的方法當然是對查詢結果進行處理了,遍歷查詢結果,當為空的時候,設置其值:
代碼如下 復制代碼$len=count($result);
for($i=0;$i<$len ;$i++){
$var = $result[$i]['name'];
if(!$var){
$result[$i]['name']='default_name';
}
}
如上辦法,不僅費時,還??隆H绻?茉?ql語句中直接解決多好啊。
SQL中有ISNULL方法,介紹如下:
ISNULL
使用指定的替換值替換 NULL。
語法
ISNULL ( check_expression , replacement_value )
參數
check_expression
將被檢查是否為 NULL的表達式。check_expression 可以是任何類型的。
replacement_value
在 check_expression 為 NULL時將返回的表達式。replacement_value 必須與 check_expresssion 具有相同的類型。
但在Mysql中,isnull只是用來判斷是否為空,不能實現替換功能,照上面寫的話,會直接報錯(Incorrect parameter count in the call to native function 'isnull' Errornumber:1582 )。
那麼Mysql中如何實現SQL中的ISNULL方法呢?
IFNULL( check_expression , replacement_value ),實現了SQL中的ISNULL方法。
見下sql語句
代碼如下 復制代碼mysql> SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
| 1 |
+-------------+
1 row in set
由於 expr1 是 1,不為 NULL,所以函數返回 1. 我們可以再試下,如果讓 expr1 為 NULL,是否能返回第二個參數呢? 不妨讓 expr1 = 1/0, 由於除數為0,結果就為 NULL 了。
代碼如下 復制代碼mysql> SELECT IFNULL(1/0,'NowaMagic');
+-------------------------+
| IFNULL(1/0,'NowaMagic') |
+-------------------------+
| www.111cn.net |
+-------------------------+
1 row in set
前面的參數為 NULL,就返回第二個參數 www.111cn.net 了。
這個函數不難理解,為什麼要介紹這個函數呢?這是為了後面講述 MySQL 下的高級黑客技術做的基礎知識准備,你可以先試著理解這麼一句 hack SQL
代碼如下 復制代碼UPDATE table SET views = '1' WHERE id = -2441 OR (ORD(MID((SELECT IFNULL(CAST(FirstName AS CHAR),0x20) FROM nowamagic.`tb2` ORDER BY id LIMIT 1,1),2,1))>112)#
Mysql的IN操作
見如下SQL語句
代碼如下 復制代碼select product
from ProductParameter
where val = 19116 OR val = 19127 OR val = 19128 OR val = 19119
OR了很多是不是覺得很繁瑣呀?用IN就解決了:
代碼如下 復制代碼select product
from ProductParameter
where val in (19116, 19127, 19128, 19119))