PHP MySQL SELECT...CONCAT()...LIKE.. 日期型態無法顯示內容是 NULL 資料列之解決方法
此為笨兔在摸索寫作過程中遇到的情況,及胡亂摸索混出的解決方法,給自己參考記錄用的,若有需者就參考!若有錯誤或其它方法,請自行更正唄!
※倘若在 MySQL 資料庫內有個 test 資料表,其二個欄位 t_name、t_date(日期類型) 及資料如下:
t_name | t_date |
笨兔 | 2019-06-20 |
小笨兔 | NULL |
大笨兔 | 2019-07-01 |
範例1:若做個搜尋參數,SQL 設定如下 (笨兔以PDO函數來寫,用Mysql或MySQLi函數亦同)
※順便記錄一下 CONCAT() 語法給自己參考用: CONCAT() 是將裡面的資料連在一起,成為資料型態,也就是沒有日期型態的顧慮。範例中 CONCAT(t_name,t_date),其第一筆所得的結果為『笨兔2019-06-20』。倘若有設定搜尋 $_GET['search'] 參數,輸入『兔2』來搜尋,也是會找到的。若要避免此情形,則需將資料欄位分開來做設定,此可參考笨兔另一隨手筆記:
<?php $sql = "SELECT * FROM test WHERE CONCAT(t_name, t_date) LIKE '%{$_GET['search']}%'";
$rs = $conn -> prepare($sql);
$rs -> execute();
foreach($rs as $row){
echo $row['t_name'].":".$row['t_date']."<br>";
} ?>
※一開始所得的結果如下,其中日期型態有 NULL 的 (小笨兔 NULL) 資料列會自動被排除而不會出現。 笨兔:2019-06-20 大笨兔:2019-07-01
範例2:改成如下,也就是加入 IFNULL() 函數,即可將 NULL 值的資料列顯示了!^^
<?php $sql = "SELECT * FROM test WHERE CONCAT(t_name, IFNULL(t_date,'')) LIKE '%{$_GET['search']}%'";
$rs = $conn -> prepare($sql);
$rs -> execute();
foreach($rs as $row){
echo $row['t_name'].":".$row['t_date']."<br>";
} ?>
※一開始所得的結果如下,其中 (小笨兔 NULL) 資料列就會顯現了。^^ 笨兔:2019-06-20 小笨兔: 大笨兔:2019-07-01 ※順便記錄一下 IFNULL() 語法之意: IFNULL(X,Y) -> 如果 X 不是 NULL (不包容0或空值) 則返回為 X 值。若是 NULL,則為 Y 值。 上述範例中 IFNULL(t_date,'') -> 若不是 NULL 則為原有的 t_date 值,若為 NULL,則為空值。