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

MySQL rækkefølge efter bedste match

For at gøre det på den første måde (starter ordet, midt i ordet, afslutter ordet), prøv noget som dette:

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

For at gøre det på den anden måde (positionen af ​​den matchede streng), brug LOCATE funktion :

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

Du vil måske også have en tie-breaker, hvis f.eks. mere end ét ord starter med hab . For at gøre det vil jeg foreslå:

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

I tilfælde af flere ord, der starter med hab , ordene der starter med hab vil blive grupperet sammen og sorteret alfabetisk.



  1. Forskellen mellem LIKE og ~ i Postgres

  2. Sådan fungerer INSTR() i MariaDB

  3. SYSUTCDATETIME() Eksempler i SQL Server (T-SQL)

  4. Oracle Database Explorer:Gratis træning og akkreditering