Sql : rang dans un classement

Répondre
sparh
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 ;)
LupusMic
le 12/08/2007 à 04:18
LupusMic
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.
mojorisin
le 12/08/2007 à 13:12
mojorisin
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
sparh
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;)
Bzh
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 !
olivier88888
le 12/09/2007 à 09:25
olivier88888
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
LupusMic
le 12/09/2007 à 20:13
LupusMic
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.
Répondre
LoadingChargement en cours