MySQL單表多關(guān)鍵字模糊查詢(xún)的實(shí)現(xiàn)
MySQL單表多關(guān)鍵字模糊查詢(xún)實(shí)現(xiàn)方法是很多人都非常想知道的一個(gè)問(wèn)題,那么,究竟采用什么方法,才能實(shí)現(xiàn)MySQL單表多關(guān)鍵字模糊查詢(xún)呢?
在最近的一個(gè)項(xiàng)目需要實(shí)現(xiàn)在MySQL單表多關(guān)鍵字模糊查詢(xún),但這數(shù)個(gè)關(guān)鍵字并不一定都存在于某個(gè)字段。例如現(xiàn)有table表,其中有title,tag,description三個(gè)字段,分別記錄一條資料的標(biāo)題,標(biāo)簽和介紹。然后根據(jù)用戶(hù)輸入的查詢(xún)請(qǐng)求,將輸入的字串通過(guò)空格分割為多個(gè)關(guān)鍵字,再在這三個(gè)字段中查詢(xún)包含這些關(guān)鍵字的記錄。
可目前遇到的問(wèn)題是,這些關(guān)鍵字是可能存在于三個(gè)字段中的任意一個(gè)或者多個(gè),但又要求三個(gè)字段必須包含所有的關(guān)鍵詞。如果分別對(duì)每個(gè)字段進(jìn)行模糊匹配,是沒(méi)法實(shí)現(xiàn)所需的要求,由此想到兩種方法:
在插入記錄的同時(shí),將需要進(jìn)行多字段模糊查詢(xún)的字段合并成一個(gè)字串并加入到一個(gè)新的字段中,然后對(duì)這個(gè)新字段進(jìn)行模糊查詢(xún)。 使用全文檢索,但是這需要用到中文分詞或者將漢字轉(zhuǎn)化為拼音(拆分漢字是不可行的,MySQL默認(rèn)FT最小字節(jié)為4),而且并不利于今后的維護(hù)。
在網(wǎng)上爬了兩天,對(duì)此問(wèn)題的處理都沒(méi)有找到滿(mǎn)意的解決方法,最后在《MySQL權(quán)威指南》中翻到了CONCAT的使用方法,在書(shū)中的對(duì)CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全體出入?yún)?shù)合并在一起而得到的字符串。只要輸入的參數(shù)中有NULL值,就返回NULL。CONCAT允許只有一個(gè)輸入?yún)?shù)的情況。
因此,MySQL單表多關(guān)鍵字模糊查詢(xún)可以通過(guò)下面這個(gè)SQL查詢(xún)實(shí)現(xiàn)
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%關(guān)鍵字%’
【編輯推薦】
常見(jiàn)MySql字段的默認(rèn)長(zhǎng)度
mysql中int數(shù)據(jù)類(lèi)型長(zhǎng)度的問(wèn)題