Question sur le GROUP BY

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Question sur le GROUP BY

Re: Question sur le GROUP BY

par Hubert Roksor » 26 déc. 2007, 12:21

Pour le CREATE TABLE qui se ballade tout seul, c'est parce que le formulaire empêche de poster un nouveau sujet si l'instruction n'apparaît pas.

Je vais devoir faire court parce que j'ai dépensé le temps qui m'était imparti dans le topic d'à côté pour expliquer pourquoi les règles existent et elles sont affichées en rouge, donc ne m'en veuillez pas si ça reste très synthétique.

Explications : ce forum est consulté par des informaticiens. Pas des bi-athlètes ou des organisateurs de courses. Aussi, les concepts d'être "1er", "2nd", être dans une équipe ou faire du sport ne nous évoque rien de très concret. En revanche, SELECT, GROUP BY et CREATE TABLE, ça on parle couramment. Les 10 lignes en français qui expliquent ce que tu cherches à faire, Morkem, me prennent 5 minutes à lire et à comprendre, et au final ne m'apprennent pas grand-chose. La requête ma donnerait plus d'info, mais quand tu mets tout sur une ligne ça ne me donne pas envie de faire scroller mon écran huit fois pour savoir ce que tu as mis dans le GROUP BY. (astuce : une ligne par clause) D'ailleurs, je lis cette requête et je n'ai aucune idée de ce à quoi correspond id.even, ideven (typo?) et compagnie, puisque je n'ai pas le schéma de la table. La solution nécessite peut-être l'utilisation de sous-requêtes... la version de MySQL utilisée ? aucune idée. Pour moi, Podium c'est surtout un bon film.

Ces règles existent pour une raison, et à chaque fois que l'on doit le réexpliquer c'est autant de temps de perdu que l'on aurait pu investir à faire quelque chose de plus utile.

Re: Question sur le GROUP BY

par Sékiltoyai » 26 déc. 2007, 01:47

CREATE TABLE
Dsl mais trop de choses, ca va tout alourdir...

D'où le faite qu'on te dise dans les rappels "poster le schéma des tables pertinentes à votre requête"... donc les champs concernés.
Au passage, le coup du CREATE TABLE, je ne l'avais pas vu, et c'est vrai que c'est assez drôle, vu que c'est le truc dans la définition de la table qui n'apporte absolument aucune information :D (autant ne rien donner :) )

Re: Question sur le GROUP BY

par Truc » 26 déc. 2007, 01:33

Truc a terminé 1/12
Mouahhh j'ai gagné \:D/
bon ok je suis déjà :arrow:
CREATE TABLE
Dsl mais trop de choses, ca va tout alourdir...

D'où le faite qu'on te dise dans les rappels "poster le schéma des tables pertinentes à votre requête"... donc les champs concernés.
Ceci dit Sékiltoyai n'a pas tort

par Sékiltoyai » 25 déc. 2007, 22:37

Le problème vient de la façon dont tu as modélisé tes relations dans les tables.
Si on considère que les gars d'une même équipe ont une propriété commune, c'est qu'il faut une table listant les équipes, contenant alors toutes les propriétés de l'équipe, et dans ta table joueurs indiquer à quelle équipe ils appartiennent.

Après tu ne nous as pas donné une description suffisante du problème pour que l'on puisse préciser la chose, mais l'idée est là, amha, tu as un problème de modélisation…

par Kaoteknik » 25 déc. 2007, 20:12

Peut-être qu'au lieu de tout sélectionner tu pourrais cibler plus précisément ta requête en y ajoutant un DISTINCT.

Code : Tout sélectionner

SELECT DISTINCT tireur FROM resultats LEFT JOIN ...
A tester.

Question sur le GROUP BY

par Morkem » 25 déc. 2007, 20:03

Salut a tous,
Noyeux Joel !!!

Bon je vous explique rapidement ce que je voudrais et de ce fait quel est mon problème.

En fait j'ai une équipe de 4 bonhommes dans un sport x qui ont fait le meme résultat (vu que c'est une équipe).
J'ai donc, dans ma table resultat (mysql), 4 ligne représentant le même résultat mais pour chacun des mecs.
Si je les affiche ca me donne donc :
Machin a terminé 1/12
Truc a terminé 1/12
...

Je voudrais maintenant que pour l'affichage il n'y ait plus qu'une ligne avec tout les noms.
Ex : L'équipe composé de Machin, Truc, ... s'est classée 1/12 lors de l'evenement 1.

J'ai donc essayé avec "GROUP BY ideven".

Le probleme c'est que les 4 lignes sont bien tranformés en une seule mais il n'y a plus qu'un seul nom qui apparait du fait, celui de l'id la plus haute de la table.

Comment pouvoir afficher ces 4 nom, comme l'exemple ci dessus ?
SELECT * FROM resultats LEFT JOIN even ON resultats.ideven = even.id LEFT JOIN tireur ON resultats.nom = tireur.nom WHERE style="Equipe" AND place<=3 GROUP BY ideven ORDER BY date DESC
Donc voila ma requete jusqu'a présent :
Je selectionne tout dans 3 tables ; resultats (pour voir leur place), even (pour voir la categorie etc...) et tireur (pour selectionner les mecs). Je ne selectionne que les match en equipe et toutes les places inférireures ou egales a 3 (un podium en fait).

Merci pour votre aide ;)

CREATE TABLE
Dsl mais trop de choses, ca va tout alourdir...