[PHP/MySQL] jointure de plusieurs tables

Créé le : 22 mai 2017
Catégorie: Divers
Mise à jour : 22 mai 2017

[PHP/MySQL] jointure de plusieurs tables

Dans l’exemple qui suit on a une table principale qui regroupe toute les commandes d’un site.
La 2eme table référence les différents produits (avec des info comme la description, le type, etc…)
La 3eme table référence les clients (avec nom, prénom, adresse, …)

Le but est qu’avec une commande SQL on puisse afficher toutes les informations dans notre page

  • 1ere table : « commandes » – id,nombre,id_produit,id_client
  • 2eme table : « produits » – id,nom_produit,type,description
  • 3eme table : « clients » – id,prenom,nom,adresse

Explication du SELECT


$sql2 = "SELECT * FROM commandes AS comm, clients AS clt, produits AS pdt 
			WHERE comm.id_client = clt.id AND comm.id_produit = pdt.id";
  1. AS = Simplification des noms. La table nommée commande est renommée en comm, clients en clt, etc…
    en général on ne met qu’une seule lettre pour simplifier au maximum
  2. WHERE = on associe les valeurs qui vont ensemble (les clés).
    comm.id_client = clt.id veut dire que id_client de la table commande est égale à l’id de la table client

Affichage des données dans la page

Le SELECT agi comme si on concaténai les 3 tables en 1 seule regroupant toutes les informations pour donner :

  • id,nombre,nom_produit,type,description,prenom,nom,adresse

  • Pour afficher le prénom du client : $donnee2[‘prenom’]
  • Pour afficher le nombre d’article : $donnee2[‘nombre’]
  • Pour afficher la description du produit : $donnee2[‘description’]

Exemple complet : Selection et affichage des données

<?php
include 'connect.php';
	$sql2 = "SELECT * FROM commandes AS comm, clients AS clt, produits AS pdt 
			WHERE comm.id_client = clt.id AND comm.id_produit = pdt.id AND actif=1
			ORDER BY id DESC";
$req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
	$nb_ligne = mysql_num_rows($req2);
	
	
	while ($donnee2 = mysql_fetch_array($req2)) { 
	echo '<h2>Nombre de ligne = '.$nb_ligne.'</h2>';
	echo ucfirst($donnee2['prenom']).' '.strtoupper($donnee2['nom']).' a acheté '.$donnee2['nombre'].' '.$donnee2['nom_produit'].'(s)</br>';
	}
	
mysql_free_result ($req2); mysql_close();
?>

Résultat


Nombre de ligne = 3
Jean DUPONT a acheté 12 smartphone(s)
Jérôme DURANT a acheté 5 serviette(s)
Pierre ROGER a acheté 7 bulle(s)

Laissez un commentaire