Page 1 sur 1
pb de requte pour faire un classement
Posté : 04 mars 2006, 11:56
par fila
Salut ! Petit ou gros pb requete !!!!
Code : Tout sélectionner
SELECT COUNT( t1.nom ) AS rang, t1.nom, t1.prenom, t1.capital, t1.nb_point_a_ajoute
FROM clt AS t1
LEFT JOIN clt AS t2 ON t1.capital + t1.nb_point_a_ajoute >= t2.capital + t2.nb_point_a_ajoute
GROUP BY t1.nom
ORDER BY rang DESC
LIMIT 0 , 30
ce qui me donne ceci:
Code : Tout sélectionner
rang nom prenom capital nb_point
4 c c 4 40
3 d d 3 40
2 b b 2 20
1 a a 1 20
Le pb c'est que celui qui le+ de point est en rend rang 4 au lieu en rang 1
et si je fais cela :
il devrait avoir en rang 1, 2 exquo(1,1) et non pas affiche 2,2 (4,4) n'est pas bon par contre car on devrait avoir (3,3)
Code : Tout sélectionner
4 d d 4 40
4 c c 4 40
2 b b 3 20
1 a a 2 20--->(1,2,4,4) au lieu de (1,2,3,3) si je ne me trompe pas
Merci de votre aide

Posté : 04 mars 2006, 14:42
par Truc
Salut,
Peux tu nous donner les caratéristiques de la table avec éventuellement de quoi la remplir un peu pour faciliter la compréhension.
carateristique de la table
Posté : 04 mars 2006, 18:14
par fila
Merci ! voici ce que tu me demandes :
Code : Tout sélectionner
CREATE TABLE clt (
rang int(11) NOT NULL ,
nom varchar(50) NOT NULL,
prenom varchar(50) NOT NULL,
capital varchar(50) NOT NULL,
nb__point_ajoute(50) NOT NULL
);
INSERT INTO clt (nom,prenom,capital, nb_point_ajoute) VALUES ( 'dupont', 'jean','10','40');
INSERT INTO clt (nom,prenom,capital, nb_point_ajoute) VALUES ( 'durant', 'jpaul','12','42');
INSERT INTO clt (nom,prenom,capital, nb_point_ajoute) VALUES ( 'duduche', 'jeanne','9','30');
INSERT INTO clt (nom,prenom,capital, nb_point_ajoute) VALUES ( 'dupontel', 'albert','19','50');
Merci par avance

Posté : 04 mars 2006, 18:44
par Truc
je comprend pas très bien le résultat que tu veux obtenir, si tu pouvais reformuler avec un exemple

exemple
Posté : 04 mars 2006, 19:23
par fila
Voila: je vais essayer d'être clair.
Je fais un classement tout bête. Je pourrais faire pour classer du premier au dernier un order by "point" comme cela celui qui a le + grand nombre de point sera premier.Le postulat suivant est de d'afficher la place des joueurs;: premier deuxieme troisieme..... Le probleme c'est qu'en cas d'egalite avec un requete simple et une variable qui s'incrementerait on aurait aussi premier, deuxieme, troisieme... mais en cas d'egalite jamais d'exequo la table serait toujours classer de 1 à n. Il faudrait arriver a afficher: premier, deuxieme, deuxieme, quatrieme......n style--->
1 dupont 50 points
1 durant 50 points
3 duduche 40 points
4 dugle 30 points
merci de t'interesser a mon cas qui n'est pas , je l'espere incurable !
Posté : 04 mars 2006, 19:52
par Cyrano
Je crois que le problème vient du fait que tu as un champ calculé dans ta table. Il faut classer selon le cumul des points et gérer le rang par programmation et non le stocker dans la table puisque c'est une valeur appelée à évoluer en parmanence.
Je ne comprends pas beaucoup plus la présence du champ nb__point_ajoute dont le type n'est du reste pas défini dans table, et encore moins un type VARCHAR pour capital alors que tu aurais dû utiliser un type numérique (INT ou MEDIUMINT.
Avec un VARCHAR, tu risques d'avoir des classements des plus fantaisistes : par exemple 12 sera classé plus grand que 100.

Posté : 04 mars 2006, 20:05
par Truc
En effet, il est plus judicieux d'effectuer un classement suivant le nombre de points puis lors de l'affichage gérer une variable RANG indépendamment de la requête.
Je dis ça parce que je vois pas la requete qui pourrai coller

type de champ
Posté : 04 mars 2006, 20:42
par fila
Merci de vos reponses !
Je vais refaire la table qui est mal faite et vais tenter le rang par programmation je crois que cela sera mieux !
Bonne soiree !
Posté : 04 mars 2006, 22:48
par Truc
Dans ce cas n'oublis pas de mettre le sujet en [Résolu]
