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

来源:https://www.cnblogs.com/KillBugMe/archive/2020/04/08/12660808.html
-Advertisement-
Play Games

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


我所做的商城項目前些時提了新需求,要求前臺搜索商品除了能通過商品名稱搜索到以外,還可以通過別個信息搜索,比如:商品編號、詳情內容描述等等,類似於全文搜索了。我首先想到的就是lucene,但是對代碼這樣的改動量就太大了。。。。目前線上版本如果做這種改動怕測試又出什麼么蛾子,如果又重新建表將這些信息另外存儲起來又感覺好麻煩。。。於是就想想在sql語句上面做文章。在網上搜了搜還真有辦法。那就是MySQL單標多欄位模糊查詢。
 
MySQL單表多欄位模糊查詢的是指實現在單表中對多欄位進行多個關鍵字的模糊查詢,但這數個關鍵字並不一定都存在於某個欄位。當然你多表關聯查詢也是可以這樣弄的。
 
例如現有table表,其中有title,tag,description三個欄位,分別記錄一條資料的標題,標簽和介紹。然後根據用戶輸入的查詢請求,將輸入的字串通過空格分割為多個關鍵字,再在這三個欄位中查詢包含這些關鍵字的記錄。
 
可目前遇到的問題是,這些關鍵字是可能存在於三個欄位中的任意一個或者多個,但又要求三個欄位必須包含所有的關鍵詞。如果分別對每個欄位進行模糊匹配,是沒法實現所需的要求,由此想到兩種方法:
 
在插入記錄的同時,將需要進行MySQL單表多欄位模糊查詢的欄位合併成一個字串並加入到一個新的欄位中,然後對這個新欄位進行模糊查詢。 
使用全文檢索,但是這需要用到中文分詞或者將漢字轉化為拼音(拆分漢字是不可行的,MySQL預設FT最小位元組為4),而且並不利於今後的維護。 
 
MySQL權威指南》中CONCAT的使用方法,在書中的對CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全體出入參數合併在一起而得到的字元串。只要輸入的參數中有NULL值,就返回NULL。CONCAT允許只有一個輸入參數的情況。

因此,MySQL單表多欄位模糊查詢可以通過下麵這個SQL查詢實現

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

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

<pre name="code" class="sql">SELECT * FROM `magazine` WHERE CONCAT(IFNULL(`title`,''),IFNULL(`tag`,''),IFNULL(`description`,'')) LIKE ‘%關鍵字%’

類似於如此則可以進行簡單的多欄位模糊搜索了。

文章轉自:https://www.cnblogs.com/fan-yuan/p/9299834.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當你訪問網頁提示: 改好配置文件,重新啟動tomcat服務,稍微等個幾分鐘就可以了。 你們的評論和點贊是我寫文章的最大動力,蟹蟹。 ...
  • 本次實驗環境:cn_windows_server_2019_x64_dvd_4de40f33cn_sharepoint_server_2019cn_sql_server_2016_enterprise_x64_dvd_8699450前期需安裝AD服務,可以參考之前的博文。第一步:安裝資料庫服務第二步... ...
  • 前言 本實驗是在centos8下搭建,搭建方式為yum(dnf)搭建,畢竟源碼搭建難度大,還要解決各種依賴關係,在搭建體驗與步驟上,與7代差別其實不大,也可能是我太菜了體會不到,最直觀的可能是版本問題,php預設版本由以前的5.x升級到了7.x,apache版本升級到了2.4,性能和效率上都有所提高 ...
  • 一 實踐規劃 1.1 實踐需求 本實驗通過資源配額和資源配置範圍的配合來控制一個命名空間的資源使用。 集群管理員根據集群用戶的數量來調整集群配置,以達到這個目的:能控制特定命名空間中的資源使用量,最終實現集群的公平使用和成本控制。 需要實現的功能如下: 限制運行狀態的Pod的計算資源用量。 限制持久 ...
  • 系統版本CentOS6.10_x64 開啟防火牆命令:service iptables start 關閉防火牆命令:service iptables stop 重啟防火牆命令:service iptables restart 查看防火牆狀態:service iptables status linux ...
  • 前言: 2020年3月7日晚7點,大佬張祥在微信群向大家詳細介紹了58同城HBase平臺及其生態的建設實踐與相關經驗,確實講得很好。今天花了點時間幫大家整理了一下,希望更多的沒有參與直播的朋友能夠看到它,也歡迎大家積極轉發一下,視頻與PPT 相關資料附於文末 。 亮點在哪 該分享的亮點在哪兒里呢?這 ...
  • 用單表接近一千萬數據(四列:int,兩個varchar,日期時間)測,發現幾個效率幾乎一致 count(0)=count(1)=count(數字)=count(*)>count(primary key)>count(column) 根據相關解釋: 1. count(指定的有效值)--執行計劃都會轉化 ...
  • 在高性能mysql第三版里,說到hash索引以下優缺點: 用MySQL(5.7.)測的時候發現可以範圍查詢。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...