Requète SQL avec jointure

Résolu
LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   -  
LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai une liste de dates en sélectionnant une date je souhaiterai que cela me retourne les réponses des membres concerné uniquement par cette date.
Je n'arrive pas à trouver la requète, pouvez-vous m'aider s'ils vous plait, je vous remercie et je vous souhaite par la même occasion de bonne fête de fin d'année.
Voici ce que j'ai fait cela me retourne toutes les réponses de toutes les dates à la fois
<div id="membre">
	<table id="ad_list" border="3px" cellpadding="0" cellspacing="3">
		<tr>
			<th width="20%">Nom</th>       
			<th width="20%">Prénom</th>
			<th width="15%">Réponse</th>          
		</tr>
<?php
$sql = "SELECT nom,prenom,reponse
FROM cdc_personnes, cdc_repondre, cdc_manifestations
WHERE cdc_personnes.idpers = cdc_repondre.idpers
AND cdc_repondre.idmanif = cdc_manifestations.idmanif";
$requete = $bdd->prepare($sql);
$requete->execute();
while ($donnees = $requete->fetch()) {
?>          
		<tr>
			<td><?php echo $donnees->nom; ?></td>
			<td><?php echo $donnees->prenom; ?></td>
			<td><?php echo $donnees->reponse; ?></td>		
		</tr>
<?php
}
$resultats->closeCursor();
?>       
	</table>
</div>

15 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour
    Quelle est la structure de ta bdd ?
    De quel type est le champ date ?
    0
  2. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour
    Le champ date est de type DATE.
    mes tables
    cdc_personnes
    id 
    nom 
    prenom
    cdc_manifestations
    idmanif
    dmanif (les dates de type date)
    lieu
    event
    cdc_repondre (table où les personnes ont apporté leurs réponses)
    idrepon
    idpers
    idmanif
    reponse (de type varchar)
    

    Donc lorsque je sélectionne une date cela me retourne bien l'url voulu c'est à dire l'id de la dmanif "ppeffectif_indiv.php?idmanif=488"
    Je te remercie pour ton aide j'ai essayé de retourner la requète dans tous les sens mais je n'y arrive pas.
    Merci
    0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     

    en sélectionnant une date je souhaiterai que cela me retourne les réponses des membres concerné uniquement par cette date


    lorsque je sélectionne une date cela me retourne bien l'url voulu c'est à dire l'id de la dmanif "ppeffectif_indiv.php?idmanif=488"


    Je ne comprend pas trop ta question...Tu me parles de dates... puis finalement tu me parles d'un ID ....

    Ce n'est pas très clair...

    Mais bon.. je pense que ce que tu cherches c'est un truc du genre :
    
    SELECT *
    FROM cdc_repondre R
    LEFT JOIN cdc_personnes P ON P.id = R.idpers
    LEFT JOIN cdc_manifestations M ON M.idmanif=R.idmanif 
    WHERE M.idmanif = '488' 
      AND dmanif  = '2016-12-24'
    

    0
  4. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour
    Excuse moi pour mes explications, mais en fait ce que tu m'as fait cela me semble exact. J'ai inséré la requète dans PhpMyadmin et cela me retourne bien les infos corectement. Ensuite j'ai remplacé "488" par $idmanif et la date par $dmanif et aucun résultat. Je ne comprends pas.
    SELECT nom,prenom,dmanif,reponse
    FROM cdc_repondre
    LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_repondre.idpers
    LEFT JOIN cdc_manifestations ON cdc_manifestations.idmanif=cdc_repondre.idmanif 
    WHERE cdc_manifestations.idmanif = '488' 
      AND dmanif  = '2016-12-30'
    

    $sql = "SELECT nom,prenom,dmanif,reponse
    FROM cdc_repondre
    LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_repondre.idpers
    LEFT JOIN cdc_manifestations ON cdc_manifestations.idmanif=cdc_repondre.idmanif 
    WHERE cdc_manifestations.idmanif = '$idmanif' 
    AND dmanif  = '$dmanif'";
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je te suggère de faire
      echo $sql;
      , cela te permettra de vérifier ce que cela contient, et le tester avec PhpMyadmin.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    j'ai fait echo $sql et cela me retourne aucune des 2 conditions.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Tu peux partager ce que donnent:
      var_dump $idmanif;
      var_dump $dmanif;
      var_dump $sql;
      ?
      0
  7. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    j'ai mis les var_dump en-dessous de execute et cela me retourne une page blanche
    $sql = "SELECT nom,prenom,dmanif,reponse
    FROM cdc_repondre
    LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_repondre.idpers
    LEFT JOIN cdc_manifestations ON cdc_manifestations.idmanif=cdc_repondre.idmanif 
    WHERE cdc_manifestations.idmanif = '$idmanif' 
    AND dmanif  = '$dmanif'";
    $requete = $bdd->prepare($sql);
    $requete->execute();
    var_dump $idmanif;
    var_dump $dmanif;
    var_dump $sql;
    while ($donnees = $requete->fetch()) {
    
    ?>          
    		<tr>
    			<td><?php echo $donnees->nom; ?></td>
    			<td><?php echo $donnees->prenom; ?></td>
    			<td><?php echo $donnees->reponse; ?></td>		
    		</tr>
    <?php
    }
    ?>
    
    0
  8. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    avec le echo $sql; voilà ce que ça donne
    SELECT nom,prenom,dmanif,reponse FROM cdc_repondre LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_repondre.idpers LEFT JOIN cdc_manifestations ON cdc_manifestations.idmanif=cdc_repondre.idmanif WHERE cdc_manifestations.idmanif = '' AND dmanif = '' 
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Tu ne nous as pas montré le code qui mettrait des données dans $idmanif et $dmanif : le problème semble venir de ce code.
      0
  9. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Donc voici ma page qui permet d'insérer la table cdc_repondre
    $PARAM  = array (
        'IDREPON'   => isset($_REQUEST['idrepon']) ? $_REQUEST['idrepon'] : '',
        'IDPERS'    => isset($_POST['idpers']) ? $_POST['idpers'] : '',
        'IDMANIF'   => isset($_POST['idmanif']) ? $_POST['idmanif'] : '',
        'REPONSE'   => isset($_POST['reponse']) ? $_POST['reponse'] : '',
    );
    
    if (isset($_REQUEST['action']) AND !empty($_REQUEST['action'])) {
        
        switch($_REQUEST['action']) {
    		case 'ajouter':
                $sql =	"INSERT INTO cdc_repondre (idpers, idmanif, reponse)
                        VALUES ('".$_SESSION['idpers']."','".$PARAM['IDMANIF']."', '".$PARAM['REPONSE']."')";
                $requete = $bdd->prepare($sql);
                $requete->bindParam(':idrepon', $PARAM['IDREPON']);
                $requete->bindParam(':idpers', $_SESSION['idpers']);
                $requete->bindParam(':idmanif', $PARAM['IDMANIF']);
                $requete->bindParam(':reponse', $PARAM['REPONSE']);
                $requete->execute();
                break;
        }
    		echo "<div style='color:red'>Merci pour ta réponse</div><br/>";
    }
        $sql = "SELECT *
                FROM cdc_manifestations
                WHERE cdc_manifestations.publier = false
                AND cdc_manifestations.idmanif NOT IN
                    (SELECT distinct cdc_repondre.idmanif 
    				FROM cdc_repondre
    				WHERE cdc_repondre.idpers = ".$_SESSION['idpers'].")
                    ORDER BY cdc_manifestations.dmanif ASC";
        $requete = $bdd->prepare($sql);
        $requete->execute();
        $nb = $requete->rowCount();
    	
    	if($nb < 1) {
    		$erreur = "<div class='erreur'>Aucune sortie n'est prévue pour s'inscrire.....</div>";
    	} else {
    		$success = "<div class='success'>Merci de t'inscrire pour les sorties.....</div>";
    	}
    ?>
    <?php echo $success; ?>
    <?php echo $erreur; ?>
    <div id="content">
    <?php
    	while ($donnees = $requete->fetch()) {
    ?>
    <form method="post">
    	<table cellpadding="0" cellspacing="3">     
    		<tr>
    			<th bgcolor="#D6DFF7" >Date de la sortie :</th>
    			<td style="color:#808080"><?php echo dateFR($donnees->dmanif) ?></td>
    			<th bgcolor="#D6DFF7">Objet :</th>
    			<td colspan="5" style="color:#808080"><?php echo $donnees->event;?></td>						
    		</tr>	
    		<tr>
    			<th bgcolor="#D6DFF7">Lieu :</th>
    			<td style="color:#808080"><?php echo $donnees->lieu; ?></td>
    		</tr>
    		<tr>		
    			<th bgcolor="#D6DFF7">Ma réponse :</th>
    			<td>
    				<select name="reponse" size="1">
    					<option value="present">Je serai Présent</option>
    					<option value="absent">Je serai Absent</option>
    					<option value="saispas">Je ne sais pas encore</option>
    				</select>
    			</td>
    			<th><input type="hidden" name="idmanif" value="<?php echo $donnees->idmanif; ?>" /></th>
    			<td>
    				<input type="hidden" name="action" value="ajouter" />
    				<input type="submit" name="submit" value="Envoyer ma réponse pour cette sortie" />
    			</td>
    		</tr>
    	</table>
    </form>
    <hr/>
    	
    <?php
    	}
    ?>      
    </div>
    
    0
  10. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    j'avais déjà essayé comme ça mais sans résultat toujours
    $sql = "SELECT nom,prenom,dmanif,reponse
    FROM cdc_repondre
    LEFT JOIN cdc_personnes ON cdc_personnes.idpers=cdc_repondre.idpers
    LEFT JOIN cdc_manifestations ON cdc_manifestations.idmanif=cdc_repondre.idmanif 
    WHERE cdc_manifestations.idmanif='".$PARAM['IDMANIF']."' 
    AND dmanif='$dmanif'";
    
    0
  11. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    c'est tout de même incroyable si je rentre cette requète en dur dans ma BDD cela me retourne bien
    NOM PRENOM REPONSE
    SELECT cdc_personnes.nom, cdc_personnes.prenom, cdc_repondre.reponse
    FROM cdc_personnes, cdc_repondre
    WHERE cdc_repondre.idmanif='488' 
    AND cdc_repondre.idpers=cdc_personnes.idpers
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Pourquoi c'est incroyable?
      Que donnent
      echo "$sql:".$sql."<br>"; 
      echo "$dmanif:". var_dump $dmanif."<br>";
      echo "$param:".var_dump $param."<br>";
      ?
      C'est quoi
      $dmanif
      ? Pourquoi fais-tu le test
      dmanif='$dmanif'"
      ?
      Tu montres des petits morceaux de code, c'est pas évident de comprendre la globalité de ce que tu fais.
      0
  12. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour
    Alors voilà j'ai fait les tests avec cette requète.
    En fait $dmanif on a pas besoin de tester
    $sql = "SELECT nom,prenom,reponse
    FROM cdc_repondre R
    LEFT JOIN cdc_personnes P ON P.idpers = R.idpers
    WHERE R.idmanif = ".$PARAM['IDMANIF'];
    echo "$sql:".$sql."<br>"; 
    echo "$idmanif:". var_dump ($idmanif)."<br>";
    echo "$param:".var_dump ($param)."<br>";
    
    $requete = $bdd->prepare($sql);
    $requete->execute();
    
    
    while ($donnees = $requete->fetch()) {
    ?>          
    		<tr>
    			<td><?php echo $donnees->nom; ?></td>
    			<td><?php echo $donnees->prenom; ?></td>
    			<td><?php echo $donnees->reponse; ?></td>		
    		</tr>
    <?php
    }
    ?> 
    

    cette requète dans phpmyadmin me retourne bien les informations souhaitées.
    Voici ce que donnent les résultats des echos
    SELECT nom,prenom,reponse FROM cdc_repondre R LEFT JOIN cdc_personnes P ON P.idpers = R.idpers WHERE R.idmanif = :SELECT nom,prenom,reponse FROM cdc_repondre R LEFT JOIN cdc_personnes P ON P.idpers = R.idpers WHERE R.idmanif =
    NULL :
    array(4) { ["IDREPON"]=> string(0) "" ["IDPERS"]=> string(0) "" ["IDMANIF"]=> string(0) "" ["REPONSE"]=> string(0) "" } Array:
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Tu peux montrer tout le code php de la page qui fait ce SELECT?
      0
  13. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour
    Alors voilà j'ai trouvé le soucis.
    En fait dans mon tableau j'ai changé la variable supergloba $_POST par $_REQUEST pour idmanif
    $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'] : '',
    );
    

    Par contre ce qui m'ennuie c'est que je n'arrive pas à comprendre pourquoi.
    Peux tu essayer de m'expliquer car sur le net je n'ai pas vraiment compris.
    Je te remercie
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Il y a deux techniques qui permettent aux pages html d'envoyer des données : get et post. Le php offre les tableaux $_get et $_post pour récupérer les données, ainsi que $_request qui regroupe les deux tableaux.
      Je dirais que le
      method="post"
      n'a pas été compris.
      0
  14. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    Bonjour
    je voudrais pour clore le sujet comprendre la phrase que tu cites..
    "Je dirais que le method="post" n'a pas été compris"
    Merci pour cette info
    Meilleurs voeux à tous.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je voulais dire que, bien que tu aies spécifié method="post", tu dois faire un $_REQUEST au lieu d'un $_POST, comme si ta spécification method="post" avait été ignorée. Je ne comprends pas pourquoi.
      0
  15. LaChaux78 Messages postés 585 Date d'inscription   Statut Membre Dernière intervention   32
     
    je te remercie.
    0