Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Reihenfolge nach bester Übereinstimmung

Um es auf die erste Art zu machen (beginnt Wort, in der Mitte des Wortes, endet Wort), versuchen Sie es so:

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

Für den zweiten Weg (Position des übereinstimmenden Strings) verwenden Sie die LOCATE Funktion :

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)

Sie können auch einen Tie-Breaker wünschen, falls beispielsweise mehr als ein Wort mit hab beginnt . Dazu würde ich vorschlagen:

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word

Bei mehreren Wörtern beginnend mit hab , die Wörter, die mit hab beginnen werden gruppiert und alphabetisch sortiert.