Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1458 connectés 

  FORUM HardWare.fr
  Programmation

  [SQL] Truc tout con qui m'enerve...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Truc tout con qui m'enerve...

n°92618
nikko
Posté le 23-01-2002 à 22:16:20  profilanswer
 

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

mood
Publicité
Posté le 23-01-2002 à 22:16:20  profilanswer
 

n°92619
404notfoun​d
Posté le 23-01-2002 à 22:21:12  profilanswer
 

Si je ne m'abuse , la deuxième requête est la même que la première dans le sens inverse ?

n°92626
nikko
Posté le 23-01-2002 à 22:33:15  profilanswer
 

je vois pas trop ce que tu veux dire..
:??:

n°92633
404notfoun​d
Posté le 23-01-2002 à 22:36:15  profilanswer
 

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 .

n°92637
404notfoun​d
Posté le 23-01-2002 à 22:41:11  profilanswer
 

je m'explique : avec un chtit ex rencontré récemment :
select conditionnement(transport) as bouteille  
pareil que  
select transport as bouteille

n°92638
Mara's dad
Yes I can !
Posté le 23-01-2002 à 22:41:18  profilanswer
 

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 !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°92639
nikko
Posté le 23-01-2002 à 22:42:37  profilanswer
 

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..

n°92641
Mara's dad
Yes I can !
Posté le 23-01-2002 à 22:45:28  profilanswer
 

Tu veux dire que :
 

Code :
  1. 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


 
te retourne plusieurs lignes ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°92644
nikko
Posté le 23-01-2002 à 22:48:54  profilanswer
 

yes, c'est ça mon probleme...  
ça me retourne toutes les lignes de la jointure

n°92649
Mara's dad
Yes I can !
Posté le 23-01-2002 à 22:53:42  profilanswer
 

Bon ben essaye comme çà :
 

Code :
  1. select max(nb_point) as max_p, locaux from stat LEFT JOIN un_match ON un_match.code_match=stat.le_match WHERE le_joueur=1 group by locaux


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 23-01-2002 à 22:53:42  profilanswer
 

n°92650
Mara's dad
Yes I can !
Posté le 23-01-2002 à 22:55:08  profilanswer
 

Sinon, tu peux nous montrer les structures de tes tables et les donnée pour faire des tests ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°92656
nikko
Posté le 23-01-2002 à 23:09:00  profilanswer
 

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]

n°92658
benou
Posté le 23-01-2002 à 23:13:56  profilanswer
 

ben y a pas de ligne avc le_joueur=1 ...


---------------
ma vie, mon oeuvre - HomePlayer
n°92659
benou
Posté le 23-01-2002 à 23:15:17  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°92660
nikko
Posté le 23-01-2002 à 23:16:11  profilanswer
 

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...

n°92663
Mara's dad
Yes I can !
Posté le 23-01-2002 à 23:21:20  profilanswer
 

Si il a joué 10 matchs dans 10 locaux différents, le group by et donc le max() ne servent à rien.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°92665
nikko
Posté le 23-01-2002 à 23:23:18  profilanswer
 

evidement, vu comme, ça c logique...
mais comment je fais pour savoir où est-ce que mon joueur a inscris son maximun de point ??

n°92666
nikko
Posté le 23-01-2002 à 23:27:22  profilanswer
 

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

n°92670
Mara's dad
Yes I can !
Posté le 23-01-2002 à 23:39:27  profilanswer
 

C'est typiquement un problème qui se règle en 2 ou 3 requêtes et qu'on voudrais traiter en une seule  :D  
 
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]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°92672
nikko
Posté le 23-01-2002 à 23:44:24  profilanswer
 

oui, mais sous MySQL je pense pas que ça passe...

n°92683
Mara's dad
Yes I can !
Posté le 23-01-2002 à 23:53:57  profilanswer
 

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


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [SQL] Truc tout con qui m'enerve...

 

Sujets relatifs
[C++] Se connecter à une base SQLConnexion SQL avec Turbo C
[SQL] Requête toute simple.... mais est elle correcte ?[CppBuilder/C++] Encore un truc a la con...
[SQL] A la portée de tout le monde ?SQL : Exporter de maniere automatique la BDD
[SQL] Algo de recherche dans une base pour forum[PHP + MS SQL SERVER] : garder des 0 devant un nombre ....
[SQL] tout bete sur un DROP TABLE[java ,linux] comment gérer un truc comme ça ?
Plus de sujets relatifs à : [SQL] Truc tout con qui m'enerve...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR