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

Bedste måde at lave en vægtet søgning over flere felter i mysql?

Sandsynligvis er denne tilgang til at udføre en vægtet søgning / resultater egnet til dig:

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

Den bruger en udvalgt underforespørgsel til at angive vægten for at bestille resultaterne. I dette tilfælde tre felter gennemsøgt, kan du angive en vægt pr. felt. Det er sandsynligvis billigere end fagforeninger og sandsynligvis en af ​​de hurtigere måder kun i almindelig MySQL.

Hvis du har flere data og har brug for resultater hurtigere, kan du overveje at bruge noget som Sphinx eller Lucene.



  1. Hvordan kontrollerer man, om en værdi allerede eksisterer for at undgå dubletter?

  2. Mysql-forespørgselsfejl - Auto-mønter ADD

  3. PHP-advarsel:mysqli_connect():(HY000/2002):Forbindelse nægtet

  4. Forbedring af partitionsvedligeholdelse med inkrementelle statistikker