sql >> Database >  >> RDS >> Mysql

MySQL-volgorde op beste match

Om het op de eerste manier te doen (begint woord, in het midden van het woord, eindigt woord), probeer zoiets als dit:

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

Om het op de tweede manier te doen (positie van de overeenkomende string), gebruik je de LOCATE functie :

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

U wilt misschien ook een tie-breaker voor het geval er bijvoorbeeld meer dan één woord begint met hab . Om dat te doen, stel ik voor:

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

In het geval van meerdere woorden die beginnen met hab , de woorden die beginnen met hab worden gegroepeerd en alfabetisch gesorteerd.



  1. Databasecorruptie in MS Access en hoe ermee om te gaan

  2. Een aangepaste ORDER BY-volgorde definiëren in mySQL

  3. Transactie ROLLBACK gebruiken in SQL Server

  4. Pakket heeft al 50 toastjes op de post gedaan. Niet meer laten zien