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
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.
$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>

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
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"...
0
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
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
0
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
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
0
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
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();
0
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
et ainsi?
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
0
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
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
0

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
0