Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ordre MySQL par meilleure correspondance

Pour le faire de la première manière (commence le mot, au milieu du mot, termine le mot), essayez quelque chose comme ceci :

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

Pour le faire de la deuxième manière (position de la chaîne correspondante), utilisez les LOCATE fonction :

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

Vous pouvez également vouloir un bris d'égalité au cas où, par exemple, plus d'un mot commence par hab . Pour ce faire, je suggérerais :

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

Dans le cas de plusieurs mots commençant par hab , les mots commençant par hab seront regroupés et triés par ordre alphabétique.