MySQL單表多關鍵字模糊查詢的實現方法

來源:互聯網
上載者:User

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

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

在插入記錄的同時,將需要進行多欄位模糊查詢的欄位合并成一個字串並加入到一個新的欄位中,然後對這個新欄位進行模糊查詢。 使用全文檢索索引,但是這需要用到中文分詞或者將漢字轉化為拼音(拆分漢字是不可行的,MySQL預設FT最小位元組為4),而且並不利於今後的維護。
在網上爬了兩天,對此問題的處理都沒有找到滿意的解決方案,最後在《MySQL權威指南》中翻到了CONCAT的使用方法,在書中的對CONCAT的描述是:

CONCAT(str1,str2,…)
傳回值:由全體出入參數合并在一起而得到的字串。只要輸入的參數中有NULL值,就返回NULL。CONCAT允許只有一個輸入參數的情況。

因此,MySQL單表多關鍵字模糊查詢可以通過下面這個SQL查詢實現
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%關鍵字%'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.