Mysql
 sql >> Database >  >> RDS >> Mysql

Ordine MySQL in base alla migliore corrispondenza

Per farlo nel primo modo (inizia parola, nel mezzo della parola, finisce parola), prova qualcosa del genere:

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

Per farlo nel secondo modo (posizione della stringa abbinata), usa le LOCATE funzione :

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

Potresti anche voler un pareggio nel caso, ad esempio, più di una parola inizi con hab . Per farlo, suggerirei:

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

Nel caso di più parole che iniziano con hab , le parole che iniziano con hab verranno raggruppati e ordinati in ordine alfabetico.