2017-09-19 4 views
1
SELECT 
MATCH(`product_name`) AGAINST ('leica' IN BOOLEAN MODE) * 100 AS name, 
MATCH(`product_category_name`) AGAINST ('leica' IN BOOLEAN MODE) * 50 AS category, 
MATCH(`product_description`) AGAINST ('leica' IN BOOLEAN MODE) * 20 AS description 
FROM products 
WHERE MATCH (`product_name`, `product_category_name`, `product_description`) AGAINST ('leica' IN BOOLEAN MODE) 
ORDER BY (name)+(category)+(description) DESC LIMIT 0, 24 

Donc, cela fonctionne très bien sauf dans un cas. Quand un produit a 'leica' dans le nom et la description, il est dépassé. Je voudrais que la description ne prenne en compte que si elle ne correspond pas à product_name ou product_category. Je pensais ajouter * -5 à quelque chose, mais je ne peux pas comprendre comment obtenir un nombre précis pour corriger ce qui apparaît dans la description sans une sorte de clause IF.Essayer de corriger pour MATCH ... CONTRE sur les premiers résultats

+0

Vous pourriez rendre vos multiplicateurs plus grands, comme 1000, 100, 10. – Barmar

Répondre

2

Ne pas ajouter les valeurs, les utiliser comme des valeurs distinctes à l'ordre par:

ORDER BY name DESC, category DESC, description DESC 

Ensuite, vous pouvez aussi ne pas besoin des multiplicateurs.

+0

C'est une grande réponse simple, merci. – Stephane