Para hacerlo de la primera manera (comienza la palabra, en medio de la palabra, termina la palabra), intente algo como esto:
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 hacerlo de la segunda manera (posición de la cadena coincidente), use LOCATE
función
:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)
También puede querer un desempate en caso de que, por ejemplo, más de una palabra comience con hab
. Para ello, sugiero:
SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word
En el caso de múltiples palabras que comienzan con hab
, las palabras que comienzan con hab
se agruparán y ordenarán alfabéticamente.