Oui non le logarithme est très bien. Mais ça pénalise trop les 0 je trouve. L'idée n'est pas d'avoir à tout prix les gens qui ont voté plusieurs villes mais un compromis.
Un exemple avec log modifié (f(x) = log(x) pour x!=0, et =0 pour x=0) avec log = log en base 2
User1 | User2 | ...
-----------------------------
Ville1 | 2 | 0 |
-----------------------------
Ville2 | 2 | 50 |
----------------------------
Ville3 | 2 | 0 |
On préfère User2
User1 | User2 | ...
-----------------------------
Ville1 | 3 | 0 |
-----------------------------
Ville2 | 3 | 50 |
----------------------------
Ville3 | 3 | 0 |
On préfère toujours User2
User1 | User2 | ...
-----------------------------
Ville1 | 4 | 0 |
-----------------------------
Ville2 | 4 | 50 |
----------------------------
Ville3 | 4 | 0 |
On préfère User1.
Maintenant faut trouver la bonne base de logarithme pour le "compromis". Et une façon efficace de calculer la somme dans le ORDER BY si mysql ne le fait pas bien.