Sql : rang dans un classement
le 10/08/2007 à 16:30
sparh
Voilà la bonne, j'ai fait 2-3 tests rapides et ça marche:
$classement = "SELECT COUNT(DISTINCT(a.point))+1 AS rang FROM membre AS a WHERE a.point > $point";
Pour être honnète là j'y comprends plus grand chose! Mais ça marche ;)
le 10/08/2007 à 16:45
Bzh
Mouai...
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.
Mais locker, c'est mal ©. Pour plein de raison que je ne vais pas exposer ici, mais locker une table rime avec
[i]deadlock et indisponibilité. Bon, maintenant, si t'as pas le choix, t'as pas le choix ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Salut
voila une solution :
SET @pos :=0;
SET @last := NULL;
SELECT pseudo, point,IF(@last = point,@pos := @pos,@pos := @pos+1) AS position,@last:= point
FROM test
ORDER BY point ASC;
+----------+-------+----------+---------------+
| pseudo | point | position | @last:= point |
+----------+-------+----------+---------------+
| pseudo 1 | 2 | 1 | 2 |
| pseudo 6 | 2 | 1 | 2 |
| pseudo 4 | 4 | 2 | 4 |
| pseudo 2 | 6 | 3 | 6 |
| pseudo 5 | 6 | 3 | 6 |
| pseudo 3 | 8 | 4 | 8 |
+----------+-------+----------+---------------+
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
le 13/08/2007 à 12:09
sparh
Bzh --> C'est à dire ???
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.
Merci d'avance à tous pour vos avis et réponse;)
le 13/08/2007 à 13:57
Bzh
Je reste sur ma position d'une table suplémentaire qui ne gère que le classement !
Il faut rester simple pour que ce soit efficace.
Là, on arrive dans de maginifiques systemes d'usines à gaz !
Bonjour,
J'avais un probleme "similaire" est du point de vue SQL il est regle'. Mon seul probleme est comment faire enter les trucs du genre "SET @pos :=0;" a partir d'une requete php? Parce que quand je fais "->fetch_assoc();" pour recuperer les results, php/mysql ne sont pas contents (enfin plus PHP je pense).
Quelqu'un a une solution ?
Merci
Olivier
C'est parce qu'il faut faire du
multi-query, et seul MySQi le gère.Enfin, il me semble, j'ai pas testé... à tester :-D
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le distinct
oops sorry je navais pas tout lu