使用即時搜尋功能搜尋資料庫表時,通常希望以優先考慮的方式對結果進行排序。最佳匹配。預設情況下,像所提供的這樣的簡單查詢可能無法根據搜尋字串的起始位置有效地對結果進行排序。
要實現更準確的「最佳匹配」排序,請考慮以下選項:
如果目標是將開頭出現的匹配字符字串作為最高優先權對結果進行排序,則可以將查詢修改為如下所示:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
這將優先考慮以搜尋字串開頭的匹配(分配值1),然後是包含該字串的匹配(分配值 3),最後匹配字串所在的位置發生在任何其他位置(分配值為 2)。
或者,如果目標是要根據匹配字串在單字中的位置對結果進行排序,查詢可以使用 LOCATE函數:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
此查詢將根據搜尋字串第一次出現的索引對結果進行排序
在多個單字同等匹配搜尋條件的情況下,可能需要引入平局打破者來進一步細化排序。這可以透過添加額外的 ORDER BY 子句來實現:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
以上是如何按「最佳匹配」對 MySQL 搜尋結果進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!