sql >> Database >  >> RDS >> Mysql

De beste manier om een ​​gewogen zoekopdracht uit te voeren over meerdere velden in mysql?

Waarschijnlijk is deze benadering van het doen van een gewogen zoekopdracht / resultaten geschikt voor u:

SELECT *,
    IF(
            `name` LIKE "searchterm%",  20, 
         IF(`name` LIKE "%searchterm%", 10, 0)
      )
      + IF(`description` LIKE "%searchterm%", 5,  0)
      + IF(`url`         LIKE "%searchterm%", 1,  0)
    AS `weight`
FROM `myTable`
WHERE (
    `name` LIKE "%searchterm%" 
    OR `description` LIKE "%searchterm%"
    OR `url`         LIKE "%searchterm%"
)
ORDER BY `weight` DESC
LIMIT 20

Het gebruikt een selecte subquery om het gewicht te geven voor het ordenen van de resultaten. In dit geval drie velden doorzocht, u kunt een gewicht per veld opgeven. Het is waarschijnlijk minder duur dan vakbonden en waarschijnlijk een van de snellere manieren in gewone MySQL.

Als je meer gegevens hebt en sneller resultaten nodig hebt, kun je overwegen iets als Sphinx of Lucene te gebruiken.



  1. Tijdgedeelte van een DateTime-veld in SQL

  2. Oracle-tabel of weergave bestaat niet vanuit de opgeslagen procedure

  3. BESTELLEN OP alfabet eerst dan volgen op nummer

  4. SQL Server - vind het nde voorkomen in een string