Médiaforma

PHP MySQL – Exercice sur les jointures

Print Friendly

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. Voici le résultat demandé :

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['OrderID']){
          echo "<tr><td></td><td></td>";
          echo "<td>".$data['Product']."</td></tr>";
        }
        else{
          $memoid=$data['OrderID'];
          echo "<tr><td>".$data['OrderID']."</td>";
          echo "<td>".$data['Customer']."</td>";
          echo "<td>".$data['Product']."</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écutez ce code dans Wamp Server. Le résultat est bien celui qui était attendu.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply