|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Bonjour à tous !
J'explique mon problème : Je souhaite réaliser la liste de toutes les équipes "non validées" (moins de 2 paiements dans l'équipe). Voici à présent la requête que j'ai réalisé : Code :
En revanche, la requête qui permet d'afficher la liste des équipes validées fonctionnent parfaitement (2 paiements ou plus dans l'équipe). Je suppose donc que le problème vient du fait qu'il n'affiche tout simplement pas les équipes avec un "nb_valide" = 0. Or je souhaite justement la liste des équipes avec un nb_valide à 0 ou 1. Pouvez-vous m'aider à comprendre pourquoi dans la liste des résultats, il n'y a pas d'équipe avec "nb_valide" à 0 ? J'espère avoir été clair dans mon explication, auquel cas, j'apporterai de plus amples informations. Merci d'avance ! |
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Benjamin Consultant informatique Inscription : août 2007 Messages : 160 ![]() |
Y a-t-il un de ces 3 champs qui appartiennent à la table "equipe" ?
date_reception_paiement ? mode_paiement ? estAnnule ? |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Non, ces trois champs appartiennent bien à la table "participer_lan".
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bonsoir,
et en inversant l'ordre des tables: Code sql :
...FROM equipe AS e LEFT JOIN participer_lan AS p... ça donne quoi ? |
|
00
|
|
|
#5 | ||
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Voici la requête modifier en inversant les tables au niveau du FROM :
Code :
|
||
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 410 ![]() |
bon,
si on suppose: participer_lan(#id_equipe, #id_tournoi, ...) parce que participation à des tournois est-ce que la requête suivante renvoie le bon nombre par équipe: Code sql :
|
||
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Alors, j'ai testé ta requête, elle me renvoie 72 équipes sur un total de 79 équipes (équipes contenue dans la table équipe).
La requête ne renvoie pas les 34 équipes non validées (que la requête doit normalement renvoyer). Je pense que le problème vient de ces filtres : Code :
date_reception_paiement>'0000-00-00' AND mode_paiement!='' |
|
|
00
|
|
|
#8 | ||||
![]() ![]() |
Si je comprends bien ta requête, les deux conditions suivantes vont filtrer les équipes qui ont un paiement :
Code :
Du coup, comme les conditions de restriction portent sur la table de droite, il faut inclure ces conditions dans la condition de jointure. Essaie comme ça : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Bonjour,
Merci de ton aide ! Ce n'est pas l'équipe qui est validé par un paiement mais chaque joueurs (appartenant à "participer_lan"). La requête permet de calculer le nombre de paiements dans chaque équipes et de valider ou non une équipe si une équipe à au moins 2 paiements. et la liste des équipes non validés (moins de 2 paiements). J'ai déjà tenté d'inverser comme tu me l'as précisé dans ta réponse mais le résultat produit toujours la même chose : Cela ne m'affiche toujours pas les "nb_valide" à 0. Petite question (peut être bête) le moteur MyISAM fonctionne avec les "LEFT JOIN" ? Y a t'il quelque chose que j'aurais oublié ? |
|
|
00
|
|
|
#10 |
![]() ![]() |
Donne la structure des tables concernées et un petit jeu de données ainsi que le résultat attendu par rapport à ces données STP.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Voici la structure de la base de données :
![]() Données de la table "equipe" : ![]() Données de la table "participer_lan" : ![]() Résultat de la requête :
|
|
|
00
|
|
|
#12 | ||
![]() ![]() |
Dans la requête, je vois une colonne "estAnnule" qui n'apparaît pas dans ta structure.
Que veux-tu dire par : "Cela ne m'affiche toujours pas les "nb_valide" à 0." ? Les équipes dans ce cas n'apparaissent pas dans le résultat ? Ça t'affiche autre chose dans la colonne résultat "nb_valide" ? J'ai légèrement corrigé ma requête mais je ne l'ai pas testée : Code :
Petit détail : la condition p.id_lan = 8 sur la table de droite fera que les équipes qui ne participent pas à ce lan seront aussi comptées à zéro. J'ai changé aussi le comptage en ce sens. Il me semble que la logique de ma requête est bonne. À essayer.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#13 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Merci pour ta réponse !
Oui j'ai retiré "estAnnulé" pour simplifier un peu, mais ce champ existe bel et bien dans la table que je dois prendre en compte pour le résultat que j'attends. "Cela ne m'affiche toujours pas les "nb_valide" à 0." J'aurais plutôt voulu dire : "Cela ne m'affiche pas les "nb_valide à 0.". Dans les résultats, je n'attends que les équipes (non validées) avec 0 ou 1 paiements de joueurs (suivant que je modifie le HAVING COUNT(p.id_equipe) < x). Oui alors concernant le "détail", c'est exactement ce que la requête produit. Elle m'affiche bien l'équipe n°36 - Gblob - nb_valide = 1. mais par contre elle m'affiche aussi toutes les équipes à "nb_valide" = 0, toute lan confondu. Et je veux justement filtrer pour ne laisser afficher que les équipes de la lan en question. |
|
|
00
|
|
|
#14 | |||||
![]() ![]() |
Citation:
Allons-y par étapes... 1) Quelles sont les équipes qui participent à la lan 8 ? Et en fait profitons-en pour récupérer le nom de l'équipe tout de suite. Code :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
En effet on a besoin de la table équipe que pour récupérer le nom de l'équipe.
Je te remercie de ton aide, je vais étudier le "LEFT OUTER JOIN" que je ne connais pas du tout. La requête fonctionne à merveille Merci encore ! |
|
|
00
|
|
|
#16 | |
![]() ![]() |
Citation:
LEFT JOIN = LEFT OUTER JOIN !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#17 |
|
Membre à l'essai
![]() Inscription : juin 2007 Messages : 61 ![]() |
Ah bon, je ne savais pas que "LEFT JOIN = LEFT OUTER JOIN"
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com