article(s) dans votre panier VOIR

Tuto PHP/MySQL | Jointures

  • Vidéo 137 sur 158
  • 4h43 de formation
  • 158 leçons

Un contenu flash devrait s'afficher ici. Votre navigateur ne comporte pas de plugin flash, ou il ne s'est pas correctement initialisé.

Vous pouvez télécharger le plugin flash depuis le site d'Adobe à l'adresse suivante : http://get.adobe.com/flashplayer/.

Pour accéder à la suite de cette formation, vous devez vous abonner.
previous
summary
resume
next
play
Jointures
00:00 / 03:20
HD
fullscreen
Je m’abonne
à partir de 16,6 € / mois
  • Visionnage en ligne
  • Accès illimité à toutes nos formations
OU
J'achète uniquement
la formation
49,90€
  • Téléchargement + VOD à vie
  • Accès uniquement à cette formation

Sommaire de la formation

Détails de la formation

Les bases de données relationnelles (comme MySQL) permettent d'insérer plusieurs tables dans une base de données et de définir des relations entre les tables. Cette section va vous montrer comment travailler simultanément sur plusieurs tables en PHP en utilisant des "jointures", c'est-à-dire en reliant les tables par l'intermédiaire d'un champ commun.

Jointures simples

A titre d'exemple, nous allons relier les tables orders et order_detail de la base de données northwind.

Comme vous pouvez le voir, ces deux tables sont reliées par le champ OrderID. En utilisant une requête SQL appropriée, il sera donc possible d'extraire des données de chacune des deux tables en reliant leurs enregistrements sur les valeurs communes du champ OrderID.

Plusieurs syntaxes sont possibles.

Sélection de tous les champs des tables orders et order_details pour lesquels le champ OrderID est identique dans les deux tables :

SELECT * FROM orders, order_details
         WHERE orders.OrderID=order_details.OrderID;

Instruction identique à la précédente, mais on utilise des alias sur les tables pour simplifier l'écriture :

SELECT * FROM orders as o, order_details as d
         WHERE o.OrderID=d.OrderID;

Sélection des champs OrderID de la table orders, Customer de la table orders et Product de la table order_details pour lesquels le champ OrderID est identique dans les deux tables :

SELECT orders.OrderID, orders.Customer, order_details.Product
FROM orders, order_details
WHERE orders.OrderID=order_details.OrderID;

Instruction identique à la précédente, mais on utilise des alias sur les champs pour simplifier l'écriture. Ces alias seront utilisés par la suite dans la boucle while qui récupère les données de la méthode fetch() :

SELECT orders.OrderID AS id,
orders.Customer AS nom,
order_details.Product AS produit
FROM orders, order_details
WHERE orders.OrderID=order_details.OrderID;

Passons à la pratique.

Nous allons lancer une requête SQL pour obtenir les champs suivants : OrderID (table orders), Customer (table orders) et Product (table order_detail).

Après avoir créé un objet PDO sur la base de données northwind :

$base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');

Une requête SELECT est exécutée pour obtenir des informations des tables orders et order_details :

$retour = $base->query("SELECT * FROM orders as o, order_details as d WHERE o.OrderID=d.OrderID");

Les données retournées sont alors parcourues avec une boucle while :

while ($data = $retour->fetch())

 

 

Exécutons ce code dans WAMP Server. Voici le résultat.