pb de requte pour faire un classement

Eléphanteau du PHP | 25 Messages

04 mars 2006, 11:56

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 :

Code : Tout sélectionner

4 d d 4 40 4 c c 4 40 2 a a 2 20 2 b b 2 20
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 :( :) :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 14:42

Salut,

Peux tu nous donner les caratéristiques de la table avec éventuellement de quoi la remplir un peu pour faciliter la compréhension.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 25 Messages

04 mars 2006, 18:14

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 :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 18:44

je comprend pas très bien le résultat que tu veux obtenir, si tu pouvais reformuler avec un exemple :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 25 Messages

04 mars 2006, 19:23

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 !

Mammouth du PHP | 19672 Messages

04 mars 2006, 19:52

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.

:-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 20:05

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 :?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 25 Messages

04 mars 2006, 20:42

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 ! :o
Bonne soiree !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

04 mars 2006, 22:48

Dans ce cas n'oublis pas de mettre le sujet en [Résolu] :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute