根據「最佳匹配」對MySQL 結果進行排序
在此場景中,目標是增強MySQL 即時搜尋查詢以對結果進行優先排序搜尋字詞在單字中出現較早的位置。
目前,查詢將結果排序依字母順序排列:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC
為了實現所需的排序,我們可以引入條件邏輯來區分搜尋字詞在結果中的位置。
按開始、中間、單字結尾
要排列單字開頭的配對優先的結果,我們可以使用以下內容查詢:
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)
此查詢計算搜尋字詞在每個結果中的位置併排序
處理平手
如果多重結果具有相同的分數或位置,我們可以引入輔助排序標準:
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
透過替換
以上是如何根據搜尋字詞位置按「最佳匹配」對 MySQL 搜尋結果進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!