Requète sondage
Résolu
LaChaux78
Messages postés
583
Date d'inscription
Statut
Membre
Dernière intervention
-
keita -
keita -
Bonjour,
Actuellement j'ai créé un sondage sur mon site. Les personnes ayant répondu sont affiché dans un tableau avec 3 possibilités de réponses donc 3 couleurs différentes, cela fonctionne bien.
Mais où j'aurai besoin de votre aide c'est que j'aimerai aussi avoir dans ce même tableau les personnes qui n'ont pas encore répondus en fait.
La boucle switch indique les couleurs des 3 réponses et par défault ça serai les personnes n'ayant pas encore répondu.
Pouvez-vous m'aider s'ils vous plait, je vous remercie.
Actuellement j'ai créé un sondage sur mon site. Les personnes ayant répondu sont affiché dans un tableau avec 3 possibilités de réponses donc 3 couleurs différentes, cela fonctionne bien.
Mais où j'aurai besoin de votre aide c'est que j'aimerai aussi avoir dans ce même tableau les personnes qui n'ont pas encore répondus en fait.
La boucle switch indique les couleurs des 3 réponses et par défault ça serai les personnes n'ayant pas encore répondu.
Pouvez-vous m'aider s'ils vous plait, je vous remercie.
$PARAM = array ( 'IDREPON' => isset($_REQUEST['idrepon']) ? $_REQUEST['idrepon'] : '', 'IDPERS' => isset($_POST['idpers']) ? $_POST['idpers'] : '', 'IDMANIF' => isset($_REQUEST['idmanif']) ? $_REQUEST['idmanif'] : '', 'REPONSE' => isset($_POST['reponse']) ? $_POST['reponse'] : '', ); <table border="2" cellspacing="1" cellpadding="5"> <tr> <th width="20%">Nom</th> <th width="20%">Prénom</th> <th width="20%">Réponse</th> </tr> <?php $sql = "SELECT nom,prenom,reponse FROM cdc_repondre LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_repondre.idpers LEFT JOIN cdc_adherer ON cdc_adherer.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(); $nbr = $requete->rowCount(); while ($donnees = $requete->fetch()) { //on teste la valeur du statut pour déterminer la couleur switch ($donnees->reponse) { case 'present': $couleur='#008000'; break; case 'absent': $couleur='#FF0000'; break; case 'saispas': $couleur='#FF8000'; break; default: $couleur='#000000'; break; } echo "<tr style=\"color:$couleur;\">"; echo "<td><b> $donnees->nom</b></td>"; echo "<td><b> $donnees->prenom</b></td>"; echo "<td><b> $donnees->reponse</b></td>"; echo "</tr>"; } echo "<br/>Soit<b> $nbr </b>Membres ayant répondus !<br/>"; echo "<br/>"; ?> </table>
A voir également:
- Requète sondage
- Sondage facebook - Guide
- Framadate sondage gratuit - Guide
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Comment épingler un sondage sur whatsapp - Accueil - Messagerie instantanée
- Requete sql pix - Forum PHP
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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"...
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
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
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();
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
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