Demande d'aide Jointure entre 3 tables !

Fermé
TheBleedz - 27 sept. 2011 à 18:55
 gugusco - 9 nov. 2011 à 20:24
Bonjour,
Je vous explique un peu je suis venus ici il a pas longtemps et j'ai trouvé mon bonheurs sur le même sujet j'ai très bien compris comment ca marcher mais la je cale. J'ai du mal a imaginer comment programmer ça ! Voila j'ai écris un script qui récupère les statues de mes amis et seulement mes amis. Ça marche super bien, sauf que j'aimerai aussi que je récupère mon statue. Et la je sais pas ou je dois insérer ca et ni comment.
Voici la requête :
	$id = htmlspecialchars($_SESSION['membre_id']);
    // On se connecte à MySQL
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=bleedzer', 'root', '', $pdo_options);
    
    // On récupère tout le contenu de la table amis
    $reponse = $bdd->query("SELECT membres.membre_nom, membres.membre_prenom, amis.membre_id_amis, status.contenu,status.membre_id
	FROM membres
	INNER JOIN amis
	ON amis.membre_id_amis = membres.membre_id
	INNER JOIN status
	ON status.membre_id = amis.membre_id_amis
	WHERE amis.membre_id = '".$id."'"); 


Merci d'avance de votre aide et bonne soirée.

A voir également:

5 réponses

Toujours pas trouver de solution help plz
1
TheBleedz Messages postés 38 Date d'inscription vendredi 15 juillet 2011 Statut Membre Dernière intervention 10 février 2017
28 sept. 2011 à 18:26
Toujours personne ?
1
Bonjour,
J'ai trouvé une solution mais elle ne marche pas =/
J'ai ajouter a la fin de WHERE ceci :
WHERE amis.membre_id = '".$id."' AND status.membre_id = '".$id."'


Cella donne :

    // On récupère tout le contenu de les tables
    $reponse = $bdd->query("SELECT status.contenu, status.membre_id, membres.membre_nom, membres.membre_id, membres.membre_prenom, amis.membre_id_amis 
	FROM membres
	INNER JOIN amis
	ON amis.membre_id_amis = membres.membre_id
	INNER JOIN status 
	ON status.membre_id = amis.membre_id_amis
	WHERE amis.membre_id = '".$id."' AND status.membre_id = '".$id."'"); 


Mais problème quand j'ai modifier cette ligne plus rien ne s'affiche... J'ai essayer de la même manière mais sans la liste d'amis et la ca marche impec faudrait juste comment faire pour que ma requête accepte le "AND status.membre_id = '".$id."'". Là je sais plus trop quoi faire.
J'espère trouver une réponse a ce gros soucis !
Voici quelque infos pour vous aidez a comprendre :

Tables status :

id = l'id du statis (publication)
membre_id = l'id du membre qui a publier
membre_contenu = le contenue de la publication

Tables amis :

id = l'id de la ligne d'amis
membre_id = l'id du membre qui a ajouter l'amis
membre_id_amis =l'id qui est devenu amis avec celui qui a demander(membre_id)

Il en a encore mais bon si je sais déjà faire ca ce serrai pas mal =) Apres juste trier par date et prendre que les statue que des amis validé ! (membre_id_aut que je n'ai pas ajouter).

N'hésiter pas si vous avez besoin de plus parce la moi je suis calé j'ai lus toute la journée pour trouver une solution essayer plein de manipulation mais rien ne fait.
Bonne journée et merci d'avance !
0
TheBleedz Messages postés 38 Date d'inscription vendredi 15 juillet 2011 Statut Membre Dernière intervention 10 février 2017
28 sept. 2011 à 15:56
Bon comme j'ai toujours pas de réponse, je me démerde comme je peux ^^
Voici ce que j'ai fait et ce code la marche sauf que j'aimerai que ce soit regrouper en une seul c'est possible ?
	$reponse = $bdd->query("
SELECT membres.membre_nom, membres.membre_prenom, amis.membre_id_amis, status.contenu,status.membre_id,status.date_creation
	FROM membres
	INNER JOIN amis
	ON amis.membre_id_amis = membres.membre_id
	INNER JOIN status
	ON status.membre_id = amis.membre_id_amis
	WHERE amis.membre_id = '".$id."' ORDER BY date_creation");
  
	$reponse1 = $bdd->query("
SELECT status.contenu, status.membre_id, membres.membre_nom, membres.membre_prenom,status.date_creation 
	FROM membres
	INNER JOIN status 
	ON status.membre_id = membres.membre_id
	WHERE status.membre_id='".$id."' ORDER BY date_creation");
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je viens d'avoir un problème assez similaire que je viens de résoudre.
J'avais aussi une triple jointure, j'ai modifié plusieurs fois ma requête pour trouver l'erreur : sans résultat.

Le problème venait de la base de donnée en elle même. Si je prends ton cas la paramètre de jointure (qui se trouve après les "ON") n'était pas vérifié. Si je prends ton exemple, je n'avais pas de correspondance entre "amis.membre_id_amis" et "membres.membre_id".

la valeur de $id existait dans une et pas dans l'autre table..

Comme il s'agit d'une jointure interne, il n'affiche pas les entrées qui n'ont pas de correspondances dans les deux tables jointes
0
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
9 nov. 2011 à 09:29
Pour résoudre ce problème, il est nécessaire de faire un LEFT JOIN ou RIGHT JOIN. Ainsi, si la correspondance n'est pas trouvé, la ligne sera tout de même retourné, mais avec "NULL" à la place de chaque champ de la table
0
Oui effectivement, il faut faire une jointure externe.
0