begin process at 2012 05 27 04:29:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Requêtes

 > 

Requête SELECT sur 2 tables avec un minimum à récupérer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Requête SELECT sur 2 tables avec un minimum à récupérer

mardi 7 juin 2011 à 21:43:10 | Requête SELECT sur 2 tables avec un minimum à récupérer

goldenboy68

Hello,

J'aurais besoin d'un peu d'aide pour une p'tite requête récalcitrante.

Voilà mes 2 tables :
Table resultats [idResultat / idJoueur / temps]
Table joueurs [idJoueur / nom / prenom / ...]

Le but est de faire un classement bien sûr, les contraintes :
1) tous les résultats d'un même joueur sont enregistrés, il faut donc récupérer que le meilleur temps
2) afficher qu'une seule fois un même joueur dans le classement

Rendu attendu :
Position / Temps / nom / prénom

Je pense que la base de la requête serait de ce type :
SELECT * FROM resultats INNER JOIN joueurs ON resultats.idJoueur=joueurs.idJoueur
=> il manque le "min" et le distinct, mais je sais pas trop où mettre ça !

Merci d'avance à ceux qui voudront bien m'éclairer !

@+
mercredi 8 juin 2011 à 11:36:14 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

jopop

Réponse acceptée !
Salut,

avec un GROUP BY tu devrais t'en sortir, tente un truc du genre :
Code :
SELECT J.prenom, J.nom, MIN(R.temps)
  FROM joueurs J, resultats R
 WHERE J.idJoueur = R.idJoueur 
 GROUP BY J.id
 ORDER BY MIN(R.temps) ASC

(ouai j'aime pas les INNER JOIN :p )

Il ne te restera plus qu'à faire le ranking.
Tu as alors 2 solutions :
- tu le fais avec un compteur, lors du parcours de résultat de ta requête, juste avant l'affichage,
- tu le fais à même ta requête avec une variable SQL, du genre :
Code :
SET @row := 0;
SELECT (@row := @row + 1) ... ;

(pour cette deuxième solution va falloir creuser de ton côté, j'utilise toujours la première méthode pour ma part)
mercredi 8 juin 2011 à 16:40:47 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

smathis

Il faut agrandir le group by au prénom et nom, sinon il se peut que la requête ne passe pas. Même si c’était déjà un résultat unique, on m'a toujours dit que quand on utilise un group by on peut seulement afficher des colonnes du group by ou des fonctions (min, avg,...)

Code :
SELECT J.prenom, J.nom, MIN(R.temps)
  FROM joueurs J, resultats R
 WHERE J.idJoueur = R.idJoueur 
 GROUP BY J.id,J.prenom,J.nom
 ORDER BY MIN(R.temps) ASC
mercredi 8 juin 2011 à 16:57:38 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

jopop

Ah, je veux bien te croire.
En fait ça fait un petit moment que je suis sur MySQL qui est très permissif.
En tout cas pour ma requête je l'ai testée et elle semble fonctionner.

Toutefois, en suivant ton principe, il vaudrait mieux faire comme tu le dis.
On ne sait jamais, ça peut peut-être varier d'un serveur MySQL à l'autre, ou suivant le paramétrage. Donc autant être le plus strict possible.
jeudi 9 juin 2011 à 00:54:01 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

goldenboy68

J'ai dû réadapter la requête car je vous avais simplifié le cas, mais un énorme merci pour cette base : au final j'ai réussi à afficher pile poil ce qu'il me fallait !

PS : un "LEFT JOIN" s'est quand même intégré dans ma requête finale ;)

@+ ! Samy
jeudi 9 juin 2011 à 00:57:22 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

goldenboy68

Ah au passage, j'ai pas mal de colonnes supplémentaires qui ne sont pas dans mon GROUP BY. Je n'avais jamais entendu parlé de cette nécessité de tout mettre dans le GROUP BY.

@+
jeudi 9 juin 2011 à 09:36:49 | Re : Requête SELECT sur 2 tables avec un minimum à récupérer

smathis

Quand GROUP BY est présent, les expressions du SELECT ne peuvent faire référence qu'à des colonnes groupées, sauf à l'intérieur de fonctions d'agrégat, la valeur de retour d'une colonne non-groupée n'étant pas unique.


Source : http://docs.postgresqlfr.org/8.1/sql-select.html

Après ça dépend de ton SGBD j'imagine. Mais ça peut être un bon réflexe qui évitera des résultats inattendu un jour.


Cette discussion est classée dans : récupérer, requête, select, tables, idjoueur


Répondre à ce message

Sujets en rapport avec ce message

Selection de tables [ par Rouk ] Bonjour,je debeloppe en vb.net un datagrid alimente par une base sqlje voudrai faire une selection des tables que j'affiche dans le datagrid.SELECT Liste tables / taille d'une bd ? [ par pablo_cg ] Bonjour, je me perds pour écrire une requête permettant de me sortir la liste des tables avec leur taille (en Mo) d'une base de données SQL Server.Que Recherche dans toute la base de données [ par RugbyOne ] Bonjour, Est-il possible de faire une recherche dans toute la base de données à l'aide d'une requête ? Je m'explique : j'ai une base SQL Server 2000 Update sur plusieurs tables [ par Chris_LaFouine ] Bonjour,Je voudrais savoir comment mettre à jour une table à partir des données d'une autre table. Je m'explique...J'ai une table A et une table B. Je Lier tables [ par piep14 ] Bonsoir, j'aurais une simple question pour vous : Je voudrais joindre des champs de tables différrentes. J'ai pour le moment la requête : Code : SEL requête SELECT: résultats tronqués... [ par wolflinger ] Bonjour,J'ai un soucis d'affiche avec des formulaires html/php.Mais je pense que le problème provient de la requete SQL.Je m'explique :Via un formulai La requête SQL SELECT [ par kj_83 ] Boujour à tous , j'ai juste une petite question toute bête : je voudrais savoir si lorsqu'on utilise la requête SQL SELECT celle-ci renvoie une valeur Select sur 2 tables [ par BasicInstinct ] bonjour tout le mondej'ai un probleme en Access2000 :j'ai 2 tables "clients" (clientsA & clientsB) de même structuresEst possible de faire une requete Problème requête SQL [ par younes371 ] Bonjour,J'ai fait cette requette, mais ça marche pas !SELECT id, nom,FROM table2WHERE idIN ( SELECT idLFROM table3WHERE idA =  '2' )MySQL a répondu:#1 Requête qui boucle sur elle même [ par spyro666 ] Bonjour, j'aurais besoin d'une information : Comment puis-je faire une requête qui boucle sur elle même avec mysql4 ? Est au moins possible ou faut-il


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales