Truc tout con qui m'enerve... [SQL] - Programmation
Marsh Posté le 23-01-2002 à 22:21:12
Si je ne m'abuse , la deuxième requête est la même que la première dans le sens inverse ?
Marsh Posté le 23-01-2002 à 22:36:15
bein en fait je me demande si
select max(nb_point) as max_p
et
select nb_point as max_p
c'est pas la même chose .
Marsh Posté le 23-01-2002 à 22:41:11
je m'explique : avec un chtit ex rencontré récemment :
select conditionnement(transport) as bouteille
pareil que
select transport as bouteille
Marsh Posté le 23-01-2002 à 22:41:18
Non c'est pas la même chose.
Max(), c'est une fonction d'agrégat qui retourne la plus grande valeur d'une série.
as max_p, c'est pour changer le nom de la colonne dans le résultat.
Mais si elle rendent le même résultat, c'est qu'il n'y a qu'une ligne pour le_joueur=1 !
Marsh Posté le 23-01-2002 à 22:42:37
normalement le max(nb_point) sert a trouver l'enregistrement qui le nb_point le + eleve.. Ca marche uniquement si je fais une requete simple :
select max(nb_point) from stat where joueur=1
la il me retourne bien 11 (le bon chiffre)
Si je lance les requetes precedentes, il m'affiche les enregistrements de la tables stat qui correspondent à la jointure..
Marsh Posté le 23-01-2002 à 22:45:28
Tu veux dire que :
Code :
|
te retourne plusieurs lignes ?
Marsh Posté le 23-01-2002 à 22:48:54
yes, c'est ça mon probleme...
ça me retourne toutes les lignes de la jointure
Marsh Posté le 23-01-2002 à 22:53:42
Bon ben essaye comme çà :
Code :
|
Marsh Posté le 23-01-2002 à 22:55:08
Sinon, tu peux nous montrer les structures de tes tables et les donnée pour faire des tests ?
Marsh Posté le 23-01-2002 à 23:09:00
c pareil
le_joueur|le_match|nb_point|nb_fautes|nb_3pts
7 | 8 | 7 | 0 | 0
5 | 8 | 6 | 0 | 0
4 | 8 | 0 | 0 | 0
code_match|locaux |visiteur |score_locaux|score_visiteur|date_match
1 |Notre Dame de Sanilhac |Peyrignac | 70 | 71 |2001-09-30
2 |Peyrignac |Prigonrieux| 86 | 64 |2001-10-07
3 |Peyrignac |Razac | 84 | 32 |2001-10-27
Voila à koi ressemble mes deux tables
[edtdd]--Message édité par nikko--[/edtdd]
Marsh Posté le 23-01-2002 à 23:13:56
ReplyMarsh Posté le 23-01-2002 à 23:15:17
sinon, si ca te retrourne la même chose, à mon avis, c'est que le group by ne groupe rien du tout, c'est à dire que pour toutes les lignes sélectionnées le champ 'locaux' est différent
Marsh Posté le 23-01-2002 à 23:16:11
si tu veux, ya environ 120 lignes dans la table, je vais pas tout recopier. Sache qu'il ya 10 ligne avec ce joueur (il a joue 10 match). Voila...
Marsh Posté le 23-01-2002 à 23:21:20
Si il a joué 10 matchs dans 10 locaux différents, le group by et donc le max() ne servent à rien.
Marsh Posté le 23-01-2002 à 23:23:18
evidement, vu comme, ça c logique...
mais comment je fais pour savoir où est-ce que mon joueur a inscris son maximun de point ??
Marsh Posté le 23-01-2002 à 23:27:22
comme ça, ya une chance que ça marche, mais le problème, c que MySQL il aime pas du tout les sous-requete...
select locaux, nb_point from stat, un_match where stat.le_mach=un_match.code_match and le_joueur=1 having nb_point in (select max nb_point from stat where le_joueur=1)
Donc, comment je peux faire
Marsh Posté le 23-01-2002 à 23:39:27
C'est typiquement un problème qui se règle en 2 ou 3 requêtes et qu'on voudrais traiter en une seule
Donc
On veux d'abord :
select max(nb_point) as max_p from stat where le_joueur=1
Bon ensuite, on veux "locaux". Pour çà il faut le_match, donc
select le_match from stat where le_joureur=1 and nb_point in ( select max(nb_point) as max_p from stat where le_joueur=1 )
reste plus qu'a trouver locaux donc :
select max(nb_point) as max_p, locaux from stat, un_match where le_joueur=1 and un_match.code_match=stat.le_match and stat.le_match in ()select le_match from stat where le_joureur=1 and nb_point in ( )select max(nb_point) as max_p from stat where le_joueur=1
))
ou un truc du genre.
Sinon, ben tu le fais en plusieur fois !
[edtdd]--Message édité par Mara's dad--[/edtdd]
Marsh Posté le 23-01-2002 à 23:53:57
Ben t'as plus qu'à faire des boucles alors !
1- rechercher le max de point
2- Boucle sur les matchs qui vont bien
3- Recherche de locaux
Marsh Posté le 23-01-2002 à 22:16:20
Bonjour,
voila, ça fait un moment que j'avais pas fait de sql, mais qd même :
pourquoi ces 2 requetes me renvoient exactement le meme resultat, alors que yen a une qui devrait me trouver le max du nb_point..
select max(nb_point) as max_p, locaux from stat, un_match where un_match.code_match=stat.le_match and le_joueur=1 group by locaux
select nb_point as max_p, locaux from stat, un_match where un_match.code_match=stat.le_match and le_joueur=1 group by locaux
Merci de votre aide