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 27/01/2010, 09h52   #1
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 202
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 202
Points : 164
Points : 164
Par défaut Combinaison de requêtes

Bonjour,

Je souhaiterai récupérer des informations sur deux tables distinctes ayant une valeur en commun.

J'ai essayé deux requêtes distinctes :
Tentative 1 :
Code :
1
2
3
4
5
6
7
8
$pre = "SELECT pro_etu_num, pro_etu_nom, pro_etu_prenom,
            pro_not_num, pro_not_j1, pro_not_j2,
            pro_not_j3, pro_not_j4, pro_not_j5, pro_not_not1, pro_not_not2,
            pro_not_not3 
    	    FROM prologue_etudiants, prologue_notes_abs
    	    WHERE prologue_etudiants.pro_etu_num = prologue_notes_abs.pro_not_num
    	    AND pro_etu_gp_tice = '".$this -> grp."' 
    	    ORDER BY pro_etu_nom ASC " ;
Tentative 1 :
Code :
1
2
3
4
5
$pre = "SELECT * FROM prologue_etudiants
            JOIN prologue_notes_abs
            ON prologue_etudiants.pro_etu_num = prologue_notes_abs.pro_not_num 
            WHERE pro_etu_gp_tice = '".$this -> grp."'
            ORDER BY pro_etu_nom ASC " ;
Mon problème est que ces deux requêtes fonctionnent mais ne me renvoient pas ce que je souhaite. En effet, je n'ai que les données qui se trouvent dans les deux tables.

Alors que je souhaiterai avoir les données de la table "prologue_etudiants" quoi qu'il arrive et récupérer celles de "prologue_notes_abs" si elles existent.

Suis-je obligé de faire ma première requête et de faire une itération sur les résultats pour récupérer les valeurs de la seconde table ?

J'utilise PDO donc je peux faire des requêtes préparées, pour accélerer le traitement, mais ce serait tellement bien d'avoir ce que je veux en une seule requête.

Merci pour votre aide...
albedo0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2010, 10h03   #2
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Bonjour,

Si tu veux tous les éléments de ta première table en jointure, il ne faut pas utiliser une jointure normale (ou interne) JOIN (INNER JOIN) mais une jointure externe (OUTER JOIN).

Comme c'est de la première table (ou table de gauche à la jointure) que tu veux tous les éléments alors c'est LEFT OUTER JOIN.

A mettre à la place de ton JOIN dans la requête qui a l'air correcte

PS: j'aurais utilisé des alias vues les longeurs de tes tables ...
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2010, 11h03   #3
Membre actif
 
Avatar de albedo0
 
Julien C
Inscription : février 2007
Messages : 202
Détails du profil
Informations personnelles :
Nom : Julien C
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : février 2007
Messages : 202
Points : 164
Points : 164
Effectivement, cela marche impeccable !!

Je connaissais pas ce LEFT OUTER JOIN... bien pratique en tout cas, il faudrait que je me penche sur tout ça !

En tout cas merci beaucoup !
albedo0 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 +1. Il est actuellement 19h40.


 
 
 
 
Partenaires

Hébergement Web