Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 12h13   #1
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 66
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : novembre 2006
Messages : 66
Points : 25
Points : 25
Par défaut Utiliser le résultat d'une requête avec jointure

Bonjour,
Je me trouve confronté à un problème un peu embarrassant.
Après de nombreuses recherches pour mettre en place ma requête, celle-ci fonctionne mais j'ai du mal à interpréter de manière optimale.

Cette requête porte sur 4 tables.
Elle dispose toute d'un champ d'identification commun.

La voici :

Code PHP :
1
2
3
4
5
6
7
$req = mysql_query("
  SELECT * 
  FROM table1 T1
  LEFT OUTER JOIN table2 T2 ON T1.id_t1 = T2.id_t2
  LEFT OUTER JOIN table3 T3 ON T1.id_t1 = T3.id_t3
  LEFT OUTER JOIN table4 T4 ON T1.id_t1 = T4.id_t4
  WHERE T1.id_t1 = '$id'"

La variable $id me sert à avoir un seul enregistrement unique en réponse à cette requête.
Celle-ci fonctionne et m'affiche bien tous les champs de toutes les tables.
Je fais un traitement derrière pour envoyer les informations dans un tableau mais quand je veux appeler un champ qui se trouve en dehors de la table T1...c'est vide !

Quelque chose genre :
$ligne_req['champ_T2'] est vide alors qu'il présente une valeur dans l'exécution de la requête.

Si vous avez une idée du problème, j'avoue que cela m'aiderait car là, je suis dans le flou le plus complet...

Merci
ksper92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 12h32   #2
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Peux-tu nous donner le code PHP qui exécute ta requête puis tente d'afficher champ_T2 ?

Ce sera probablement plus facile de t'aider d'autant que tu fais un traitement pour envoyer toutes les informations dans un tableau.
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 15h45   #3
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 66
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : novembre 2006
Messages : 66
Points : 25
Points : 25
Je traite les réponses comme cela :

if (mysql_num_rows($req) > 0) {
while ($ligne_req = mysql_fetch_array($req)) {
...

Je vérifie la présence d'au moins 1 résultat et je mets le tout dans un tableau.
Rien de trop complexe normalement. Sauf que là, ça ne fonctionne pas
ksper92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h12   #4
Membre du Club
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2011
Messages : 36
Points : 55
Points : 55
Bonjour,

Cela peut éventuellement venir des noms générés par le sgbd si par exemple t1 et t2 ont toutes les deux un champ nommé libelle.

Vérifie bien le nom des colonnes de $ligne_req avec par exemple.
westdigit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h21   #5
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Le select * c'est mal
Même si tu as beaucoup de champs c'est pas plus mal de les énuméré avec par exemple un alias spécifique en fonction de la table dont ils dépendent.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h36   #6
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 66
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : novembre 2006
Messages : 66
Points : 25
Points : 25
je regarde vos pistes et je reviens vers vous pour la suite savoir si cela fonctionne
Merci de vous intéresser au problème déjà !
ksper92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 18h07   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
A tout fin utile, voici comment se servir des alias pour résoudre ce malicieux problème:
Code :
SELECT t1.a t2.a FROM table_1 AS t1 JOIN table_2 AS t2 ON (t1.id=t2.table_1_id);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/05/2011, 08h46   #8
Nouveau Membre du Club
 
Inscription : novembre 2006
Messages : 66
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : novembre 2006
Messages : 66
Points : 25
Points : 25
Merci Benjamin (et les autres ),
C'est désormais plus clair dans ma tête et j'ai pu résoudre ce problème d'écriture de requête.
Merci.
ksper92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h52.


 
 
 
 
Partenaires

Hébergement Web