Requète SELECT avec jointure

Résolu/Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - Modifié par jordane45 le 24/03/2015 à 20:28
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 25 mars 2015 à 20:06
Bonjour,
J'ai une requète avec jointure avec laquelle tout se passe bien
là voici
 $sql = "SELECT *
   FROM tb_gestion_admin
   INNER JOIN tb_adherent
   ON tb_adherent.id_adherent = tb_gestion_admin.rid_adherent
   WHERE id_adherent = :id_adherent
   AND actif = 1";
 $requete = $bdd->prepare($sql);       
 $requete->execute(array(
      'id_adherent' => $id_adherent
      ));

mais il faut que je rajoute une table et là mon formulaire ne s'affiche plus.
Pouvez me dire, s'ils vous plait si ma requète avec 3 tables est bonne pour savoir si mon problème est lié avec cette requète.
Je vous remercie
 $sql = "SELECT *
   FROM tb_gestion_admin
   INNER JOIN (tb_adherent
   ON tb_adherent.id_adherent = tb_gestion_admin.rid_adherent)
   INNER JOIN tb_participant
   ON tb_adherent.id_adherent = tb_participant.rid_adherent
   WHERE id_adherent = :id_adherent
   AND actif = 1";
 $requete = $bdd->prepare($sql);       
 $requete->execute(array(
      'id_adherent' => $id_adherent
      ));
A voir également:

4 réponses

jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
Modifié par jordane45 le 24/03/2015 à 20:33
Bonjour,

1 - As tu testé ta requête en direct dans ta BDD ??
au cas où, regarde ici : https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

2 - A quoi servent ces parenthèses dans tes jointures ?
Essayes comme ceci :
$sql = "SELECT *
        FROM tb_gestion_admin
        INNER JOIN tb_adherent  ON tb_adherent.id_adherent = tb_gestion_admin.rid_adherent
        INNER JOIN tb_participant   ON tb_adherent.id_adherent = tb_participant.rid_adherent
        WHERE tb_gestion_admin.id_adherent = :id_adherent
           AND actif = 1";

 $requete = $bdd->prepare($sql);       
 $requete->execute(array('id_adherent' => $id_adherent ));



et en utilisant des ALIAS pour le nom de tes Tables...ça devient encore plus lisible
$sql = "SELECT *
        FROM tb_gestion_admin G
        INNER JOIN tb_adherent A   ON A.id_adherent = G.rid_adherent
        INNER JOIN tb_participant P ON A.id_adherent = P.rid_adherent
        WHERE G.id_adherent = :id_adherent
          AND actif = 1";

 $requete = $bdd->prepare($sql);       
 $requete->execute(array('id_adherent' => $id_adherent ));


Cordialement,
Jordane
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
24 mars 2015 à 23:00
Bonjour
En fait mes tables sont
table tb_adherent
id_adherent
etc...(sans interet)

table tb_gestion_admin
id_gestion_admin
rid_adherent
etc...

table tb_participant
id_participant
rid_adherent
etc...

et avec cette requète comme je le disais n'affiche pas mon formulaire et aucun message est retourné.
	$sql = "SELECT *
			FROM tb_gestion_admin
			INNER JOIN tb_adherent
			ON tb_adherent.id_adherent = tb_gestion_admin.rid_adherent
			INNER JOIN tb_participant
			ON tb_adherent.id_adherent = tb_participant.rid_adherent
			WHERE id_adherent = :id_adherent
			AND actif = 1";
	$requete = $bdd->prepare($sql);							
	$requete->execute(array(
						'id_adherent' => $id_adherent
						));

En fait j'affiche le formulaire avec ce lien pour pouvoir modifier les infos des membres.
Dans ma BDD j'ai testé cette requète et elle ne fonctionne pas pourtant elle ma semble correct.
<a href="./index.php?body=modif_membre&type=admin&id_adherent=<?php echo $donnees['id_adherent'];?>"></a>

Merci de ton coup de main
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
24 mars 2015 à 23:06

Dans ma BDD j'ai testé cette requète et elle ne fonctionne pas pourtant elle ma semble correct.

Et bien si elle ne fonctionne pas dans ta BDD ... normal que ça ne t'affiche rien....
c'est donc qu'elle n'est pas bonne....
A la limite... essaye de faire des LEFT JOIN à la place des INNER
et donc.. en direct dans ta BDD .. tu peux tester :
SELECT *
FROM tb_gestion_admin G
LEFT JOIN tb_adherent A ON A.id_adherent = G.rid_adherent
LEFT JOIN tb_participant P ON A.id_adherent = P.rid_adherent
WHERE  A.id_adherent = 'xxxx'
AND actif = 1

bien sûr.. tu remplace les xxxx par un ID d'adhérant existant dans ta BDD
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
24 mars 2015 à 23:19
SUPER génial ça marche tu peux me donner une explication entre LEFT et INNER s'il te plait.
Merci encore
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
24 mars 2015 à 23:52
https://www.commentcamarche.net/faq/34631-mysql-quelle-jointure-choisir
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
25 mars 2015 à 20:06
Merci pour tout
0