Médiaforma

PHP MySQL – Jointures

Print Friendly

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())
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply