[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";
- 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 - 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