Un nouvel arrivant sur le site peut donner trois noms de villes et le site doit proposer une dizaine d'utilisateurs qui aiment le plus ces trois villes.
Exemple, j'arrive sur le site et je précise les 3 villes: ville1, ville2 et ville3.
Et dans la base on a quelque chose du genre:
User1 | User2 | User3 | ... ---------------------------------------------- Ville1 | 20 | 10 | 0 | ---------------------------------------------- Ville2 | 50 | 0 | 1000 | ---------------------------------------------- Ville3 | 40 | 40 | 0 |
User1 aime la ville Ville1 avec 20 coeurs et User3 ne l'aime pas.
User2 aime la ville Ville3 avec 40 coeurs, etc..
Donc il faut que je sorte un classement des users en fonction de ces 3 villes.
Dans un cas comme celui-ci, je voudrais privilégier User1 qui semble avoir des gouts communs à l'utilisateur arrivant plutot que User3, qui malgré le fait qu'il aime beaucoup plus la Ville2 que les autres, n'aime pas du tout Ville1 et Ville3.
Comment je peux faire ça de façon efficace? On peut mettre en cache des infos redondantes avec des structures supplémentaire qui mettent 1 jour à être calculé ou n'importe quoi d'autre, la seule vraie contrainte c'est le query pour un nouvel arrivant qui doit être efficace. C'est pas forcément du SQL, je peux très bien faire un programme en C qui s'executera sur le serveur.
Du coté des SGBD, peut-on utiliser ORDER BY expression dans mysql? Si oui, peut-on mettre quelque chose de non-linéaire dans "expression"? Si oui, est-ce que c'est efficace? Y a-t-il une manière de faire une recherche vraiment personnalisé avec sa propre définition de ranking?