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.