MySQL單表多關(guān)鍵字模糊查詢的實現(xiàn)方法
更新時間:2011年03月20日 19:15:47 作者:
MySQL單表多關(guān)鍵字模糊查詢實現(xiàn)方法是很多人都非常想知道的一個問題,那么,究竟采用什么方法,才能實現(xiàn)MySQL單表多關(guān)鍵字模糊查詢呢?
在最近的一個項目需要實現(xiàn)在MySQL單表多關(guān)鍵字模糊查詢,但這數(shù)個關(guān)鍵字并不一定都存在于某個字段。例如現(xiàn)有table表,其中有title,tag,description三個字段,分別記錄一條資料的標(biāo)題,標(biāo)簽和介紹。然后根據(jù)用戶輸入的查詢請求,將輸入的字串通過空格分割為多個關(guān)鍵字,再在這三個字段中查詢包含這些關(guān)鍵字的記錄。
可目前遇到的問題是,這些關(guān)鍵字是可能存在于三個字段中的任意一個或者多個,但又要求三個字段必須包含所有的關(guān)鍵詞。如果分別對每個字段進行模糊匹配,是沒法實現(xiàn)所需的要求,由此想到兩種方法:
在插入記錄的同時,將需要進行多字段模糊查詢的字段合并成一個字串并加入到一個新的字段中,然后對這個新字段進行模糊查詢。 使用全文檢索,但是這需要用到中文分詞或者將漢字轉(zhuǎn)化為拼音(拆分漢字是不可行的,MySQL默認(rèn)FT最小字節(jié)為4),而且并不利于今后的維護。
在網(wǎng)上爬了兩天,對此問題的處理都沒有找到滿意的解決方法,最后在《MySQL權(quán)威指南》中翻到了CONCAT的使用方法,在書中的對CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全體出入?yún)?shù)合并在一起而得到的字符串。只要輸入的參數(shù)中有NULL值,就返回NULL。CONCAT允許只有一個輸入?yún)?shù)的情況。
因此,MySQL單表多關(guān)鍵字模糊查詢可以通過下面這個SQL查詢實現(xiàn)
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%關(guān)鍵字%'
可目前遇到的問題是,這些關(guān)鍵字是可能存在于三個字段中的任意一個或者多個,但又要求三個字段必須包含所有的關(guān)鍵詞。如果分別對每個字段進行模糊匹配,是沒法實現(xiàn)所需的要求,由此想到兩種方法:
在插入記錄的同時,將需要進行多字段模糊查詢的字段合并成一個字串并加入到一個新的字段中,然后對這個新字段進行模糊查詢。 使用全文檢索,但是這需要用到中文分詞或者將漢字轉(zhuǎn)化為拼音(拆分漢字是不可行的,MySQL默認(rèn)FT最小字節(jié)為4),而且并不利于今后的維護。
在網(wǎng)上爬了兩天,對此問題的處理都沒有找到滿意的解決方法,最后在《MySQL權(quán)威指南》中翻到了CONCAT的使用方法,在書中的對CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全體出入?yún)?shù)合并在一起而得到的字符串。只要輸入的參數(shù)中有NULL值,就返回NULL。CONCAT允許只有一個輸入?yún)?shù)的情況。
因此,MySQL單表多關(guān)鍵字模糊查詢可以通過下面這個SQL查詢實現(xiàn)
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%關(guān)鍵字%'
相關(guān)文章
MySQL通過DQL實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的基本查詢
這篇文章給大家介紹了MySQL如何通過DQL進行數(shù)據(jù)庫數(shù)據(jù)的基本查詢,文中通過代碼示例和圖文結(jié)合介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01
linux(Centos7)下安裝mysql8.0.18的教程圖解
這篇文章主要介紹了linux(Centos7)安裝mysql8.0.18的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11
MySQL中的alter table命令的基本使用方法及提速優(yōu)化
這篇文章主要介紹了MySQL中的alter table命令的基本使用方法及提速優(yōu)化的方法,包括ALTER COLUMN的使用等等,需要的朋友可以參考下2015-11-11
Mysql的列修改成行并顯示數(shù)據(jù)的簡單實現(xiàn)
這篇文章主要介紹了Mysql的列修改成行并顯示數(shù)據(jù)的簡單實現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下2016-10-10
在?CentOS?7?下如何使用?Ansible?Playbook?實現(xiàn)?MySQL?8.0.34?的
要在?CentOS?7?下使用?Ansible?Playbook?實現(xiàn)?MySQL?8.0.34?的二進制安裝,需要先下載?MySQL?8.0.34?的二進制包,并將其上傳至目標(biāo)服務(wù)器,對MySQL?8.0.34?二進制安裝過程感興趣的朋友跟隨小編一起看看吧2024-03-03
MySQL千萬級數(shù)據(jù)的大表優(yōu)化解決方案
mysql數(shù)據(jù)庫中的表數(shù)據(jù)量幾千萬后,查詢速度會很慢,日常各種卡慢,嚴(yán)重影響使用體驗。在考慮升級數(shù)據(jù)庫或者換用大數(shù)據(jù)解決方案前,必須優(yōu)化現(xiàn)有mysql數(shù)據(jù)庫表設(shè)計和sql語句。2022-11-11

