MySQL簡單實現多欄位模糊查詢

2021-09-07 15:56:55 字數 1534 閱讀 2899

原創 2023年05月03日 16:40:20

我所做的**專案前些時提了新需求,要求前台搜尋商品除了能通過商品名稱搜尋到以外,還可以通過別個資訊搜尋,比如:商品編號、詳情內容描述等等,類似於全文搜尋了。我首先想到的就是lucene,但是對**這樣的改動量就太大了。。。。目前線上版本如果做這種改動怕測試又出什麼么蛾子,如果又重新建表將這些資訊另外儲存起來又感覺好麻煩。。。於是就想想在sql語句上面做文章。在網上搜了搜還真有辦法。那就是mysql單標多字段模糊查詢。

mysql單錶多字段模糊查詢的是指實現在單錶中對多字段進行多個關鍵字的模糊查詢,但這數個關鍵字並不一定都存在於某個字段。當然你多表關聯查詢也是可以這樣弄的。

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

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

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

《mysql權威指南》中concat的使用方法,在書中的對concat的描述是:

concat(str1,str2,…)

返回值:由全體出入引數合併在一起而得到的字串。只要輸入的引數中有null值,就返回null。concat允許只有乙個輸入引數的情況。

因此,mysql單錶多字段模糊查詢可以通過下面這個sql查詢實現

[sql]view plain

copy

print

?select * from `magazine` where concat(`title`,`tag`,`description`) like 『%關鍵字%』  

select * from `magazine` where concat(`title`,`tag`,`description`) like 『%關鍵字%』

但是這樣有個問題,如果這三個欄位中有值為null,則返回的也是null,那麼這一條記錄可能就會被錯過,怎麼處理呢,我這邊使用的是ifnull進行判斷,則sql改為:

[sql]view plain

copy

print

?

name="code" class="sql">select * from `magazine` where concat(ifnull(`title`,''),ifnull(`tag`,''),ifnull(`description`,'')) like 『%關鍵字%』  

select * from `magazine` where concat(ifnull(`title`,''),ifnull(`tag`,''),ifnull(`description`,'')) like 『%關鍵字%』

類似於如此則可以進行簡單的多字段模糊搜尋了。   

MySQL簡單實現多欄位模糊查詢

我所做的 專案前些時提了新需求,要求前台搜尋商品除了能通過商品名稱搜尋到以外,還可以通過別個資訊搜尋,比如 商品編號 詳情內容描述等等,類似於全文搜尋了。我首先想到的就是lucene,但是對 這樣的改動量就太大了。目前線上版本如果做這種改動怕測試又出什麼么蛾子,如果又重新建表將這些資訊另外儲存起來又...

簡單實現mysql多欄位模糊查詢

在後台的專案中,會經常遇到,就是資訊的查詢,這裡就舉個簡單的例子,如搜尋某乙個產品的資訊,在乙個表裡面有多個字段,而搜尋的內容可能是其中的某個字段,這樣只有多欄位查詢才能實現。mysql多欄位模糊查詢 指在表單中對多字段進行多個關鍵字的模糊查詢,而這個關鍵字在所有字段裡面的其中之一 也可以關聯多表查...

mysql查詢多欄位 mysql多欄位模糊查詢

在最近的乙個專案需要實現在mysql單錶多關鍵字模糊查詢,但這數個關鍵字並不一定都存在於某個字段。例如現有table表,其中有title,tag,description三個字段,分別記錄一條資料的標題,標籤和介紹。然後根據使用者輸入的查詢請求,將輸入的字串通過空格分割為多個關鍵字,再在這三個欄位中查...