Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ordem MySQL por melhor correspondência


Para fazer da primeira maneira (começa a palavra, no meio da palavra, termina a palavra), tente algo assim:
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

Para fazer isso da segunda maneira (posição da string correspondente), use o LOCATE função :
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)

Você também pode querer um desempate caso, por exemplo, mais de uma palavra comece com hab . Para isso, sugiro:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word

No caso de várias palavras começando com hab , as palavras que começam com hab serão agrupados e classificados em ordem alfabética.