sql >> Base de Datos >  >> RDS >> Mysql

Orden de MySQL por mejor coincidencia

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.