У меня есть запрос sql для функции поиска, которая немного сложна, но отлично работает.
SELECT
SQL_CALC_FOUND_ROWS p.id as id,
p.title as title,
co.title as company,
p.price as price,
p.image_url as image_url FROM products p
JOIN product_categories pc ON p.id = pc.product_id
JOIN categories cat ON pc.category_id = cat.id
JOIN companies co ON p.company_id = co.id
WHERE MATCH(p.title) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(p.description) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(cat.title) AGAINST("nalle" IN BOOLEAN MODE)
OR MATCH(co.title) AGAINST("nalle" IN BOOLEAN MODE)
GROUP BY p.id
ORDER BY p.title
LIMIT :offset, :limit
Теперь он упорядочен по названию продукта, но на первом месте должны быть самые релевантные результаты. Это означает, что если он соответствует как p.title
, так и p.description
, он более релевантен, чем если он соответствует только p.title
. Лучшим совпадением было бы совпадение всех четырех.
Из-за сложности запроса я не знаю, как его вычислить.
Я предполагаю, что мне нужно SELECT ??? as points
... ORDER BY points
.