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).

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
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.
Merci d'avance à ceux qui peuvent m'aider avec leurs idées/bouts de codes/liens...

Joe