1. 程式人生 > >MySQL 一個條件查詢出資料表中所有滿足條件的資料的方法

MySQL 一個條件查詢出資料表中所有滿足條件的資料的方法

專案開發中遇到一個問題:搜尋框只傳入一個條件,在SQL查詢的時候如何查詢出所有滿足條件的資料。想到的第一解決方案是在後端進行邏輯處理的時候進行 if...else...的拼接。

但是拼接多個if...else...也不過是權宜之計,假如新增欄位也不便於程式碼維護。查詢mysql手冊發現了一個非常有意思的函式 :CONCAT

mysql對這個 函式的描述是,字串比較函式 ,官方例子/描述如下:

  • CONCAT(str1,str2,...)

返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。或許有一個或多個引數。 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。一個數字引數被轉化為與之相等的二進位制字串格式;若要避免這種情況,可使用顯式型別 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT('My', 'S', 'QL');

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL');

-> NULL

mysql> SELECT CONCAT(14.3);

-> '14.3'

可能看描述不是很明白,實際運用是怎樣的呢?如下:
SELECT * FROM `tb_behavior_log` WHERE CONCAT(`behavior_log_action`,`behavior_log_controller`,`behavior_log_id`,`behavior_log_opname`) LIKE '%index%'

當我的資料表中有多個欄位,我卻只傳入了一個查詢條件,如何一次將所有包含這個欄位的資料查詢出來呢?這時候就可以使用CONCAT()這個mysql函式,引數為:欄位名。只需要這一條SQL就可以實現初始需求。不得不說很強大。