cadoudal56 Posté 30 Novembre 2006 Partager Posté 30 Novembre 2006 Bonjour à tous et à toutes, Je me permet de poster mon probleme car cela fais 3 jours que je tourne en rond et je ne trouve pas la sortie... J'ai bien sur tenter de trouver une réponse sur le web, mais cela doit etre bien caché car je ne trouve pas... Cela va sembler banal pour certaines pointures du SQL, mais pour moi, ce n'est pas aussi simple qu'il n'y parait. Voici mon probleme... Je tente de créer un site sur des championnats sportifs J'ai une table que l'on va appeller classement, et qui contient des infos comme la journée, les points, l'ID de l'équipe etc.... Pour sortir un classement je fais un SELECT tout bete avec les ORDER BY qui vont bien et qui me sors le classement des équipes de la 1ere à la dernière. Le classement se fait par points, puis à la différence de but et enfin par nombre de buts marqués. Je donne ici le nom des champs pour que l'on s'y retrouve mieux id_team => ID de l'équipe id_day => ID de la journée jouée pts => Points de l'équipe bp => Buts Placés (buts marqués) bc => Buts Concédés (buts pris) Voic mon probleme : J'aimerais sortir une requete qui me donne pour une équipe X son classement journée après journées (ie : Journée 1 => 3eme, journée 2 => 6eme, Journée 3 => 6ème, Journée 4 => 10ème etc...) J'ai trouvé un bout de requète que j'ai réadapté et qui ma foi fonctionne, mais qui n'est pas réaliste, c'est à dire que cela me remonte des trucs, mais c'est faux... C'est qu'il doit y avoir une erreur quelque part : Voici ce que j'ai : SELECT C1.id_team, count(C2.id_team) AS rang, C1.ptsFROM classement AS C1JOIN classement AS C2 ON C1.pts <= C2.ptsWHERE C1.id_team = 11 AND C1.id_day = C2.id_dayGROUP BY C1.id_day Ce que je n'arrive pas à faire, c'est avoir la bonne place de l'équipe dans le classement. Je me suis dis que c'est surement parce que dans le SELECT j'ai mes conditions dans le ORDER BY qui réorganise bien le tout, et que je ne les ai pas ici... Alors j'ai éssaye : SELECT C1.id_team, count(C2.id_team) AS rang, C1.ptsFROM classement AS C1JOIN classement AS C2 ON C1.pts <= C2.pts AND (C1.bp - C1.bc) < (C2.bp - C2.bc)WHERE C1.id_team = 11 AND C1.id_day = C2.id_dayGROUP BY C1.id_day Mais cela me remonte des trucs encore plus fantaisiste. Bref je tourne en rond et je n'y arrive pas... Si une bonne ame charitable, experte en SQL pouvait m'aider.... Merci d'avance **EDIT** Modérateur (TheRec): Merci d'utiliser les BBCodes pour présenter du code, en l'occurrence la balise SQL ou CODE Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 30 Novembre 2006 Partager Posté 30 Novembre 2006 Bonjour, La requète suivante n'est pas suffisante ? SELECT *FROM classement WHERE id_team=11ORDER BY date ASC Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadoudal56 Posté 30 Novembre 2006 Auteur Partager Posté 30 Novembre 2006 Non parce qu'en fait le but de cette requete est la suivante : Combien d'équipes ont un nombre supérieur de points et une meilleure différence de buts que l'équipe que j'ai sélectionné. Avec cela, je serais capable de terminer quelle est la position de l'équipe dans le classement. En faisant un GROUP BY id_day, j'aurais la liste de toutes les journées du championnat, avec la place dans le classement pour l'équipe dans chaque journée @+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 30 Novembre 2006 Partager Posté 30 Novembre 2006 Ok je vois (maintenant) ce que tu veux dire... effectivement c'est plus complexe que ce que j'ai proposé Tu veux que l'équipe sélectionnée apparaisse en tête de liste ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
cadoudal56 Posté 1 Décembre 2006 Auteur Partager Posté 1 Décembre 2006 Hello, Ca y est, j'ai trouvé la solution Les conditions de la jointure n'étant pas assez restrictive, car c'est une expression logique qui ne classe pas les critères par ordre d'importance, il est nécessaire de les "découper". Cela nous donne : SELECT C1.id_team, count(C2.id_team) AS rang, C1.ptsFROM classement AS C1JOIN classement AS C2 ON C1.pts < C2.pts OR (C1.pts = C2.pts AND C1.bp-C1.bc < C2.bp-C2.bc) OR (C1.pts = C2.pts AND C1.bp-C1.bc = C2.bp-C2.bc AND C1.bp <= C2.bp)WHERE C1.id_team = 11 AND C1.id_day = C2.id_dayGROUP BY C1.id_day Merci à tous @+ cadou **EDIT** Modérateur (TheRec): Merci d'utiliser les BBCodes pour présenter du code, en l'occurrence la balise SQL ou CODE Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant