Bonjour,
Je cherche depuis quelque temps à faire une requête MySQL pour faire une recherche à partir de n critères mais de manière "souple", l'idée étant que la requête ne remonte pas uniquement les enregistrements matchant exactement aux n critères donnés, mais aussi ceux qui matcheraient avec 1 à n-1 critères. Un champ virtuel "score" doit cependant être construit afin de sanctionner la pertinence des enregistrements remontés, à savoir : 100% si l'on matche avec tous les n critères, 100*(n-1/n)% si l'on matche avec n-1 critères, ... et ainsi de suite (on remonte bien entendu rien si l'on ne matche avec aucun critère).
J'aurais pu arriver à ce résultat de manière "crade" en faisant toutes les combinaisons possibles de requêtes selon les critères, et faire ma sauce (en PHP dans mon cas), mais niveau performance je pense que ça n'est pas optimal, d'autant plus que je suis persuadé que MySQL est autosuffisant pour faire ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT matable.id, score FROM matable WHERE -- score est "virtuel" test1 -- si test1 est vrai, score recoit 20% de plus dans cet exemple test2 -- si test1 est vrai, score recoit 20% de plus dans cet exemple test3 -- si test1 est vrai, score recoit 20% de plus dans cet exemple test4 -- si test1 est vrai, score recoit 20% de plus dans cet exemple test5 -- si test1 est vrai, score recoit 20% de plus dans cet exemple ORDER BY score DESC
Merci d'avance à ceux qui peuvent m'aider avec leurs idées/bouts de codes/liens...
Joe
Partager