LEFT JOIN sur trois tables [Résolu]

Signaler
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
-
Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
-
Bonjour,

Ma formule ci-dessous fonctionne bien pour deux tables. je souhaite pouvoir y adjoindre une 3e pour la lecture des niveaux

La table "mr_manivclts" contient uniquement les ID des clients, leurs choix matière(matiere_id) et niveau(niveau_i).

La requête me permet de nommer les ID et les afficher. Alors comment adjoindre la table mr_niveaux(et niveau_id) dans la même requête ?

$sql = "SELECT * FROM mr_matnivclts LEFT JOIN mr_matieres ON mr_matieres.matiere_id = mr_matnivclts.matnivclt_id WHERE client_id = '$client_id'"; 


Merci de votre aide.

Configuration: Windows / Firefox 73.0

6 réponses

Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 874
Bonjour

SELECT 
FROM TABLE1
LEFT JOIN TABLE2 ON.....
LEFT JOIN TABLE3 ON ...


Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Merci Jordane,

J'ai déjà essayé comme cela :

$sql = "SELECT * FROM mr_matnivclts LEFT 
JOIN mr_matieres ON mr_matieres.matiere_id = mr_matnivclts.matnivclt_id WHERE client_id = '$client_id'
JOIN mr_niveaux ON mr_niveaux.niveau_id = mr_matnivclts.matnivclt_id WHERE client_id = '$client_id'";


J'ai l'erreur suivante :
"Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, bool given in /srv/data/web/vhosts/www.maxireussite.com/htdocs/administration/miserelation.php on line 42"

Ligne 42 :
while( $result = mysqli_fetch_object($requete1) )

Soit redit en passant ma formule avec deux tables ne produit aucune erreur à la ligne 42.
Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 874
$sql = "SELECT * 
FROM mr_matnivclts MM
LEFT JOIN mr_matieres MA ON MA.matiere_id = MM.matnivclt_id 
LEFT JOIN mr_niveaux N ON N.niveau_id = MM.matnivclt_id 
WHERE MM.client_id = '$client_id'";

Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Merci, mais si je n'ai plus de message d'erreur, j'ai une répétiion anormale des lignes.

Code complet :

$sql = "SELECT * FROM mr_matnivclts 
LEFT JOIN mr_matieres ON mr_matieres.matiere_id 
LEFT JOIN mr_niveaux ON mr_niveaux.niveau_id = mr_matnivclts.matnivclt_id WHERE client_id = '$client_id'";       
$requete1 = $bdd->query($sql);
while( $result = mysqli_fetch_object($requete1) )
  {
              <?php    echo(
           "<div align=\"center\">".$result->ville_id."------".$result->ville."------".
$result->cp." <a href=\"modifier_intervenant3.php?matniv_id=".
$result-> ville_id."\">modifier--- ) ;

          }
Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 874
Tu obtiens quoi actuellement ?
Tu veux obtenir quoi ?

Sans ces infos..impossible de te répondre.

Tu peux sûrement inverser les tables dans ton from/join
par exemple
$sql = "SELECT * 
FROM mr_matieres MA
LEFT JOIN mr_matnivclts MM  ON MM.matnivclt_id =  MA.matiere_id 
LEFT JOIN mr_niveaux N ON N.niveau_id = MM.matnivclt_id 
WHERE MM.client_id = '$client_id'";
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Salut,

Ainsi que je l'explique au tout début, la table mr_matnivclts contient les ID des clients, les ID des matières et des niveaux. je souhaite selont l'ID client afficher le choix des matières et de niveau demandés. cela donne pour chaque client 1,2 ou 3 lignes de renseignements à l’affichage.

J'ai donc la table mr_matnivclts et les tables mr_matières et mr_niveaux pour afficher le ou les matières et niveaux par id client demandé.

Tables mr_matieres
matiere_id
Matiere


Table niveaux
niveau_id
niveau
Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 874
Tu dis

, j'ai une répétiion anormale des lignes.


Tu peux expliquer ??

Et puis.. histoire de vérifier que le souci vient (ou pas) de la requête, tu l'as testé directement dans phpmyadmin bien entendu...?!
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Voilà j'ai trouvé !

		 $sql = "SELECT *
	      FROM mr_matnivclts
	      LEFT JOIN mr_matieres ON mr_matieres.matiere_id = mr_matnivclts.matiere_id
	      LEFT JOIN mr_niveaux ON mr_niveaux.niveau_id = mr_matnivclts.niveau_id
	      WHERE client_id = '$client_id'";
	      

	//exécution de la requête:
 	$requete1 = $bdd->query($sql);

    //affichage des données:
    while( $result = mysqli_fetch_object($requete1) )
    {
?>
    

					 <?php    echo(
           "<div align=\"center\">".$result->matiere_id."------".$result->matiere."------".$result->niveau." </div>\n"
       ) ;


Et cela affiche en fonction du client :

2------Français------Primaire

1------Mathématiques------Primaire

5------Anglais------Primaire
Messages postés
29838
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
2 874
Tu mettras le sujet en résolu dans ce cas.