在WHERE 子句中連接MySQL 欄位:解決搜尋歧義
您的目標是最佳化搜尋查詢,以便在使用者存取時返回更具體的結果輸入全名作為搜尋詞。目前,您的查詢分別搜尋名字列和姓氏列,即使只有一個名字包含搜尋字詞,也會導致配對。
為了解決這個問題,您嘗試在 WHERE 子句中使用 concat_ws() 函數連接名字和姓氏欄位。但是,您最初將其添加為第三個 OR 條件的方法並不成功。
但是,正如您後來發現的那樣,運行 concat_ws() 函數作為查詢中的最後一個子句(在檢查各個字段和其他字段之後)數據)解決了這個問題。這表明查詢中函數執行的順序有時會影響其有效性。
Robert Gamble 提供的簡化查詢實現了所需的結果:
select * from table where concat_ws(' ',first_name,last_name) like '%$search_term%';
此查詢有效地連接了第一個查詢和姓氏字段,將組合字符串視為單個搜索值。透過使用帶有通配符的 LIKE 運算符,它僅傳回搜尋字詞出現在串聯名稱中任意位置的記錄。
這種方法可以提供更精確的搜尋結果,確保僅在第一個和第二個都出現時才傳回符合項。姓氏包含搜尋詞,從而消除了各個字段部分匹配的問題。
以上是在 MySQL `WHERE` 子句中使用 `CONCAT_WS()` 時如何解決搜尋歧義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!