article(s) dans votre panier VOIR

Tuto PHP/MySQL | Exercice sur les jointures simples

  • Vidéo 138 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
Exercice sur les jointures simples
00:00 / 02:21
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

Ecrivez le code permettant d'afficher les résultats sous la forme d'un tableau dans lequel les champs OrderID et Customer ne sont pas répétés s'ils sont identiques. 

Solution

Faites une pause dans la vidéo et écrivez le code demandé. Vous pourrez reprendre le visionnage de la vidéo pour prendre connaissance de la solution.

<!DOCTYPE html>

<html>

  <head>

    <meta charset="UTF-8" />

    <title>Jointure entre deux tables</title>

    <style>

      td { padding-right: 30px;}

    </style>

  </head>

  <body>

    <?php

      try {

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

      }    

      catch(exception $e) {

        die('Erreur '.$e->getMessage());

      }

      $base->exec("SET CHARACTER SET utf8");

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

      echo "<table>";

      $memoid=0;

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

        if ($memoid == $data){

          echo "<tr><td></td><td></td>";

          echo "<td>".$data."</td></tr>";

        }

        else{

          $memoid=$data;

          echo "<tr><td>".$data."</td>";

          echo "<td>".$data."</td>";

          echo "<td>".$data."</td></tr>";

        }  

      }

      echo "</table>";

      $base = null;

    ?>

  </body>

</html>

Une grande partie du code de la rubrique précédente est conservé. Seule la logique d'affichage diffère. 

Pour ne pas répéter les champs OrderId et Customer, il suffit de comparer la valeur du champ OrderID de l'enregistrement courant et de l'enregistrement précédent. S'ils sont égaux, les champs OrderID et Customer ne doivent pas être affichés. Dans le cas contraire, ils doivent être affichés.

Pour mémoriser la valeur du champ orderId de l'enregistrement précédent, on utilise une variable tampon nommée $memoid.

Avant d'accéder au premier enregistrement de la réponse, cette variable est initialisée à 0.

L'instruction fetch retourne le premier enregistrement de la réponse. Le champ OrderID est comparé à la variable $memoid. Comme ils sont différents, OrderID est mémorisé dans $memoid, puis les champs OrderID, Customer et Product sont affichés.

A la prochaine itération, si orderId est égal à $memoid, seul le champ product est affiché.

Ainsi de suite jusqu'à ce que tous les enregistrements aient été passés en revue.

 

 

Exécutons ce code dans Wamp server. Le résultat est bien celui qui était attendu.