Mysql中IFNULL與IN操作


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))
 

更多詳細內容請查看:http://www.111cn.net/database/mysql/57520.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM