Plusieurs solutions :
- créer un champ "rang" que tu mettras à jour
- sélectionner tes membres avec un ORDER BY point DESC, puis déterminer le rang en PHP
;)
merci pour ces pistes:
pour la 1ère solution, c'est impossible, il y a des milliers de membres et chaque membre à des points en plus / en moins plusieurs fois par jour.
La seconde me parait plus faisable, je vai travailler la dessus mais à priori je ne vois pas comment
"déterminer le rang en PHP".
Et bien, quand tu fais un while pour lister les divers membres, tu incrémentes une variable $i en partant de 1 au premier membre.
Comme çà, au membre x, tu auras son rang dans $i.
De toutes façons, niveau optimisations, tu ne pourras pas faire grand chose si tu ne stockes pas le rang dans un champ SQL : en effet, quoi qu'il arrive, tu devras scanner tous les membres pour connaitre leur rang.
mysql> SELECT DISTINCT COUNT(*) AS rang FROM test WHERE point ='5';
+------+
| rang |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
mysql> SELECT DISTINCT COUNT(*) AS rang FROM test WHERE point ='4';
+------+
| rang |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
Le membre qui a 5 points a soit disant un rang 2. Or on a deux membres qui ont 5 points. ils ont les rangs 1 et 2.
Et le membre qui a 4 points n'est pas au rang 1, mais au rang 3.
Ou alors, on a pas la même notion de rang, et tu nous as mal exposé ton problème.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Je vais essayer d'être plus concret que Bzh ;)
Le classement sera, dans un temps plus ou moins éloigné, faux. Ce n'est pas parce que le code est faux, c'est simplement parce que ton site est multi-utilisateur.
Personnellement, je suis partisant de faire le maximum en base de données, pour éviter les incohérences de données. Si tu ne fais pas comme ça, tu dois locker la table pendant que tu traites les données, pour t'assurer de la cohérence de la base.
LupusMic --> Ce que tu dis: pendant qu'un membre affiche le rang un autre peut ajouter / retirer des points ce qui fausse le classement. Il faudrai donc bloquer la colonne point quand on affiche le rang . C'est bien ça??
mojorisin --> je vai tester ton truc, si je comprends bien, tu crée une colonne virtuelle qui contient la classement.