Requète sondage
Résolu/Fermé
LaChaux78
Messages postés
577
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
3 novembre 2024
-
22 janv. 2017 à 10:01
keita - 23 janv. 2017 à 05:21
keita - 23 janv. 2017 à 05:21
5 réponses
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
Ambassadeur
1 551
Modifié par yg_be le 22/01/2017 à 10:49
Modifié par yg_be le 22/01/2017 à 10:49
bonjour, tu ne nous expliques pas ce qui ne fonctionne pas.
J'imagine que ton soucis vient de la façon dont tu as fait la requête.
Je suppose que tu souhaites que ta requête te renvoie aussi les personnes qui sont dans cdc_personnes et dans cdc_adherer, mais pas dans cdc_repondre.
C'est bien cela? Dans ce cas, je te suggère de faire ta requête sur cdc_personnes, left join cdc_adherer, left join cdc_repondre.
En effet, en écrivant "left join", tu décides de prendre tous les enregistrements de la première table (celle de gauche), même si il n'y a pas d'enregistrement correspondant dans la deuxième table.
Evidemment, rowCount() de la nouvelle requête ne sera plus le nombre de "Membres ayant répondus"...
J'imagine que ton soucis vient de la façon dont tu as fait la requête.
Je suppose que tu souhaites que ta requête te renvoie aussi les personnes qui sont dans cdc_personnes et dans cdc_adherer, mais pas dans cdc_repondre.
C'est bien cela? Dans ce cas, je te suggère de faire ta requête sur cdc_personnes, left join cdc_adherer, left join cdc_repondre.
En effet, en écrivant "left join", tu décides de prendre tous les enregistrements de la première table (celle de gauche), même si il n'y a pas d'enregistrement correspondant dans la deuxième table.
Evidemment, rowCount() de la nouvelle requête ne sera plus le nombre de "Membres ayant répondus"...
LaChaux78
Messages postés
577
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
3 novembre 2024
32
22 janv. 2017 à 11:02
22 janv. 2017 à 11:02
Bonjour,
oui c'est vraiment cela que je souhaiterai.
Tu me conseille donc de faire une deuxième requète? je n'ai pas trop compris car les tables qui seraient concernées c'est cdc_personnes et cdc_adherer j'ai pourtant bien fait LEFT JOINT sur ses 2 tables.
Merci
oui c'est vraiment cela que je souhaiterai.
Tu me conseille donc de faire une deuxième requète? je n'ai pas trop compris car les tables qui seraient concernées c'est cdc_personnes et cdc_adherer j'ai pourtant bien fait LEFT JOINT sur ses 2 tables.
Merci
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
Modifié par yg_be le 22/01/2017 à 11:21
Modifié par yg_be le 22/01/2017 à 11:21
Je te conseille de modifier l'ordre des tables dans ta requête, pour avoir: cdc_personnes, left join cdc_adherer, left join cdc_repondre.
SELECT nom,prenom,reponse FROM cdc_personnes LEFT JOIN cdc_adherer ON cdc_adherer.idpers = cdc_personnes.idpers LEFT JOIN cdc_repondre ON cdc_personnes.idpers = cdc_repondre.idpers WHERE annee='$aadh' AND cdc_repondre.idmanif = ".$PARAM['IDMANIF']." ORDER BY cdc_repondre.reponse,cdc_personnes.nom ASC
LaChaux78
Messages postés
577
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
3 novembre 2024
32
22 janv. 2017 à 11:39
22 janv. 2017 à 11:39
j'ai fait comme tu me l'a suggeré mais cela ne retourne toujours pas les personnes qui n'ont pas encore répondu et qui ce trouve dans la table cdc_personnes
$sql = "SELECT nom,prenom,reponse FROM cdc_personnes LEFT JOIN cdc_adherer ON cdc_adherer.idpers = cdc_personnes.idpers LEFT JOIN cdc_repondre ON cdc_repondre.idpers = cdc_personnes.idpers WHERE annee='$aadh' AND cdc_repondre.idmanif = ".$PARAM['IDMANIF']." ORDER BY cdc_repondre.reponse,cdc_personnes.nom ASC"; $requete = $bdd->prepare($sql); $requete->execute();
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
22 janv. 2017 à 12:18
22 janv. 2017 à 12:18
et ainsi?
je ne sais pas dans quelle table est le champ annee. si il n'est pas dans la table cdc_personnes, tu dois aussi déplacer la condition dans le ON, par exemple, si annee est dans cdc_repondre:
SELECT nom,prenom,reponse FROM cdc_personnes LEFT JOIN cdc_adherer ON cdc_adherer.idpers = cdc_personnes.idpers LEFT JOIN cdc_repondre ON cdc_personnes.idpers = cdc_repondre.idpers AND cdc_repondre.idmanif = ".$PARAM['IDMANIF']." WHERE annee='$aadh' ORDER BY cdc_repondre.reponse,cdc_personnes.nom ASC
je ne sais pas dans quelle table est le champ annee. si il n'est pas dans la table cdc_personnes, tu dois aussi déplacer la condition dans le ON, par exemple, si annee est dans cdc_repondre:
SELECT nom,prenom,reponse FROM cdc_personnes LEFT JOIN cdc_adherer ON cdc_adherer.idpers = cdc_personnes.idpers LEFT JOIN cdc_repondre ON cdc_personnes.idpers = cdc_repondre.idpers AND cdc_repondre.idmanif = ".$PARAM['IDMANIF']." AND annee='$aadh' ORDER BY cdc_repondre.reponse,cdc_personnes.nom ASC
LaChaux78
Messages postés
577
Date d'inscription
lundi 25 juillet 2016
Statut
Membre
Dernière intervention
3 novembre 2024
32
22 janv. 2017 à 12:28
22 janv. 2017 à 12:28
Un très grand merci ça me retourne bien les personnes qui n'ont pas encore répondu avec ta première solution.
Bonne journée.
Cordialement
Bonne journée.
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
SELECT nom,prenom,reponse FROM cdc_personnes LEFT JOIN cdc_adherer ON cdc_adherer.idpers = cdc_personnes.idpers LEFT JOIN cdc_repondre ON cdc_personnes.idpers = cdc_repondre.idpers AND cdc_repondre.idmanif = ".$PARAM['IDMANIF']." AND annee='$aadh' ORDER BY cdc_repondre.reponse,cdc_personn
1 2 3 4 5 6 7
1 2 3 4 5 6 7