sql >> Databáze >  >> RDS >> Mysql

Nejlepší způsob, jak provést vážené vyhledávání ve více polích v mysql?

Pravděpodobně je pro vás tento přístup váženého vyhledávání / výsledků vhodný:

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

K určení váhy pro seřazení výsledků používá výběrový poddotaz. V tomto případě jsou prohledána tři pole, můžete zadat váhu na pole. Je pravděpodobně levnější než sjednocení a pravděpodobně jeden z rychlejších způsobů pouze v prostém MySQL.

Pokud máte více dat a potřebujete výsledky rychleji, můžete zvážit použití něčeho jako Sphinx nebo Lucene.



  1. PHP MySql:Print Tree - Parent Child Checkbox

  2. SQL vrátí 100 náhodných řádků pro každý věk

  3. Dotaz MySQL není vložen, když proměnná PHP obsahuje jednoduché uvozovky

  4. Přírůstek sloupců v laravel