sql >> Databasteknik >  >> RDS >> Mysql

MySQL-ordning efter bästa matchning

För att göra det första sättet (börjar ordet, i mitten av ordet, avslutar ordet), prova något i stil med detta:

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

För att göra det på andra sättet (positionen för den matchade strängen), använd LOCATE funktion :

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

Du kanske också vill ha en tie-breaker om till exempel mer än ett ord börjar med hab . För att göra det skulle jag föreslå:

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

I fallet med flera ord som börjar med hab , orden som börjar med hab kommer att grupperas och sorteras i alfabetisk ordning.



  1. Har Oracle en motsvarighet till SQL Servers tabellvariabler?

  2. Hur effektiv är din ProxySQL-nod?

  3. RoR:Kan inte ändra_kolumn i postgres, bra i MySQL (MySQL för utveckling, Postgres på Heroku)

  4. Vad betyder Clustered and Non-Clustered index egentligen?