Я использую такой запрос, как этот:
SELECT p.name, d.overview
FROM products AS p
LEFT JOIN descriptions AS d ON p.DescriptionID = d.ID
WHERE MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) > 0
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) > 0;
Как сделать соответствующую сортировку этих результатов?
я пробовал
ORDER BY MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE)
OR MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC
Но это не помогает, потому что результат не сортируется в соответствии с их релевантностью.
MATCH ... OR MATCH ...
^^
Это or
делает это двоичным выражением. Бинарные выражения оцениваются как true или false. Поэтому вы разбираетесь, совпадают они или нет. Поскольку предложение where
уже гарантирует соответствие всех строк, это не добавляет порядок.
Попробуйте упорядочить по целочисленному выражению, например суммированную релевантность:
ORDER BY
MATCH (p.name) AGAINST ('ram' IN BOOLEAN MODE) +
MATCH (d.overview) AGAINST ('ram' IN BOOLEAN MODE) DESC
Unknown column 'Relevancy' in 'where clause'