您現在的位置是:首頁 > 運動

MySQL 使用 CONCAT 實現單表多欄位模糊查詢

由 文江部落格 發表于 運動2022-08-31
簡介一個數字引數被轉化為與之相等的二進位制字串格式,若要避免這種情況,可使用顯式型別 cast 例如:SELECT CONCAT(CAST(int_col AS CHAR), char_col)CONCAT 函式在連線字串的時候,只要其中一個

資料結構串concat什麼意思

前段時間在開發一個 CRM 系統,在搜尋使用者資訊的時候遇到了問題,普通的 SQL 語句只能搜尋某一個欄位裡面的內容,如果要查詢多個欄位的內容,類似於全文搜尋,這時候就要用到CONCAT函數了。

MySQL 使用 CONCAT 實現單表多欄位模糊查詢

CONCAT

CONCAT 函式使用方法:

CONCAT(str1,str2,…)

返回結果為連線引數產生的字串。如有任何一個引數為 NULL ,則返回值為 NULL。

注意

如果所有引數均為非二進位制字串,則結果為非二進位制字串。

如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。

一個數字引數被轉化為與之相等的二進位制字串格式,若要避免這種情況,可使用顯式型別 cast 例如:

SELECT CONCAT(CAST(int_col AS CHAR), char_col)

CONCAT 函式在連線字串的時候,只要其中一個是 NULL,那麼將返回 NULL

模糊查詢

單表多欄位模糊查詢的是指實現在單表中對多欄位進行多個關鍵字的模糊查詢,但這數個關鍵字並不一定都存在於某個欄位。

例如現有 table 表,其中有 title、tag、description 三個欄位,分別記錄一條資料的標題、標籤和介紹。然後根據使用者輸入的查詢請求,將輸入的字串透過空格分割為多個關鍵字,再在這三個欄位中查詢包含這些關鍵字的記錄。

可目前遇到的問題是,這些關鍵字是可能存在於三個欄位中的任意一個或者多個,但又要求三個欄位必須包含所有的關鍵詞。如果分別對每個欄位進行模糊匹配,是沒法實現所需的要求,由此想到兩種方法:

在插入記錄的同時,將需要進行MySQL單表多欄位模糊查詢的欄位合併成一個字串並加入到一個新的欄位中,然後對這個新欄位進行模糊查詢。

使用全文檢索,但是這需要用到中文分詞或者將漢字轉化為拼音(拆分漢字是不可行的,MySQL 預設 FT 最小位元組為 4),而且並不利於今後的維護。

因此 MySQL 單表多欄位模糊查詢可以透過下面這個SQL查詢實現:

SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%關鍵字%’;

推薦文章