第一種 or
根據搜索框給定的關鍵詞,模糊搜索用戶名和帳號都匹配的用戶集合html
<select id="list" parameterType="com.user.UserInfo" resultType="com.user.UserInfo"> SELECT * FROM user WHERE 1 = 1 <if test="searchParam != null and searchParam != ''"> AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%') </if> </select>
可是以上查詢中,若是user_name 或者 user_account 中任意一個屬性的全部數據爲null時(好比account字段的全部值均未賦值,默認值爲null),即便另外一箇中包含查詢的數據,也查詢不到數據。mysql
兩種解決方法:sql
1.給可能爲null的查詢字段設置默認值,空字符串或者其餘;數據庫
2.改用or鏈接多個模糊查詢數據庫設計
AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%') 改成 AND user_name like CONCAT('%',#{searchParam},'%') or user_account like CONCAT('%',#{searchParam},'%')
and station_name like CONCAT('%',#{queryRecordVO.stationName},'%')
or user_number like CONCAT('%',#{queryRecordVO.stationName},'%')函數
感受用or的話 用postman測試接口的時候 把前面模糊查詢有點影響 查出來的數據感受有點亂post
第二種 CONCAT(VALUE_CODE
, NAME
)
<select id="list" parameterType="ParamConfigCondition" resultType="ParamConfig"> SELECT a.PARAM_CODE, a.VALUE_CODE, a.`NAME`, a.IS_READ_ONLY, a.DESCR FROM TPT_PARAM_CONFIG a WHERE 1 = 1 <if test="paramCode != null and paramCode != ''"> AND a.PARAM_CODE = #{paramCode} </if> <if test="searchParam != null and searchParam != ''"> AND CONCAT(`VALUE_CODE`, `NAME`) LIKE CONCAT('%',#{searchParam},'%') </if> </select>
注:CONCAT(VALUE_CODE
, NAME
) 其中字段若是是關鍵字是要用」`」來引發來的,否則會報錯!測試
暫時在用第二種spa
第三種 concat_ws(...)
百度方法 https://jingyan.baidu.com/article/11c17a2c6da078f446e39daa.html設計
mysql能夠對數據庫多個字段同時進行模糊查詢,例如:數據庫設計中把姓名設計爲兩個字段,一個字段爲姓LASTNAME,一個字段爲名字FIRSTNAME。當界面進行模糊搜索時,mysql中有concat(...),concat_ws(...)兩個函數。
例子以下:
SELCET * FROM T-USER U WHERE CONCAT(U.LASTNAME,U.FIRSTNAME) LIKE '%$LSP_NAME$%'
LASTNAME 字段是姓
FIRSTNAME字段是名字
當查詢字段爲null時,返回結果爲null。與concat_ws(...)不一樣。
若是爲多個字段同時進行查詢時,使用concat_ws(...).
select concat_ws(',','11','22','33');
select concat_ws(',','11','22','33',null);
都返回11,22,33
CONCAT_WS() 表明 CONCAT With Separator,是CONCAT()的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要鏈接的兩個字符串之間。分隔符能夠是一個字符串,也能夠是其它參數。
CONCAT()能夠鏈接一個或者多個字符串,CONCAT_WS()能夠添加分割符參數。