Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1559 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Performance de ma table

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Performance de ma table

n°2314934
abdoulayec​oumba
Posté le 04-05-2018 à 17:40:24  profilanswer
 

Bonjour, tout le monde,  
J’ai une table dénommée ‘’produits ‘’ dans laquelle j’enregistre tous les produits commercialisés par une boutique et qui comporte 02 colonnes :
 
id prdt
1 riz
2 farine de blé
3 tomate concentrée
4 semoule
5 huile
6 biscuit
 
et une autre table dénommée ‘’journal’ ’qui comporte 5 colonnes, chaque ligne contient les éléments d’un journal de stock de produits comme suit :  
 
journal
 
id produit               entree   sortie
1 riz                        2500            0
2 farine de blé        3000            0
3 tomate concentrée    1000            0
4 farine de blé         500            0
5 semoule             2000            0
6 riz                            4000            0
7 huile                          500            0
8 riz                            0         1000
9 semoule               450             0
10 tomate concentrée 4000             0
11 biscuits               1200             0
 
 Je voudrais parcourir la table ‘’journal’’ à l’aide de chaque produit qui se trouve dans la table ‘’produit’’, sélectionner l’ensemble des opérations qui  concernent le produit en question dans la table ‘’journal’’ et ensuite classer les résultats obtenus dans des tableaux d’affichages pour chaque type de produits comme suit :
 
Tableau affichage riz
produit                 entrée         sortie
riz                          2500            0
riz                         4000              0
riz                             0                 1000
 
Tableau farine de blé
produit                entrée        sortie
Farine de blé         3000                   0
Farine de blé          500                   0
 
Etc…
Pour parvenir à cet objectif jai essayé de lire la table avec une boucle ‘’while’’ a l’intérieur de laquelle j’introduis une requête ‘’select ‘’ afin de pouvoir y collecter les données qui devront figurer dans mes petits tableaux  d’affichage. J’ai  effectué cette technique elle marche mais ma table journal ne comporte qu’un petit nombre de lignes pour le moment. Maintenant je  voudrais savoir lorsque que la table ‘’journal’’ comportera dans l’avenir plusieurs lignes (des centaines ou des milliers) est ce que cette méthode sera efficace, est ce qu’elle ne va pas ralentir l’exécution de mon code car j’ai appris dans plusieurs documentations que, introduire une requête dans une boucle while n’est pas conseillé.  
Si la méthode que j’ai adoptée présente des risques de performance au fur et a mesure que les enregistrements de ma table augmentent dans le moyen et le long terme, quelle méthode alternative qui me mettrait à l’abris d’ennuis futurs me conseillez-vous .
Voici mon code :

Code :
  1. <html>
  2. <head>
  3.         <meta charset="utf-8" />
  4.         <link rel="stylesheet" href="" />
  5.     </head>
  6. <body>
  7. <?php
  8.          //connection a la base de données
  9.     try
  10.          {
  11.          $bdd = new PDO('mysql:host=localhost;dbname=comptes','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  12.          }
  13.     catch(Exception $e)
  14.          {
  15.           die('Erreur : '.$e->getMessage());
  16.          }
  17.  
  18.          // Compter le nombre d'enregistrements contenus dans la table produits
  19.         $req = $bdd->prepare('SELECT * FROM produits'); 
  20.                   $req->execute();
  21.                   echo $req->rowCount() . ' resultat(s)'.'<br />';
  22.         $nbrlignes = $req->rowCount();
  23.                   echo $nbrlignes.'<br />';
  24.  //inialisation de la premiere ligne de la table produit  
  25.            $ligneproduit = 1;
  26.     
  27.     //creation de la boucle chargée d'effectuer toutes les operations
  28.           while ( $ligneproduit <=$nbrlignes )
  29.                         {
  30.                                  //Selection du produit dans la table "produits"  
  31.                
  32.         $req = $bdd->prepare('SELECT * FROM produits WHERE id= :id');
  33.                           $req-> execute(array(
  34.                           'id'=> $ligneproduit,
  35.                                  ));
  36.                          while ($donnees = $req->fetch())
  37.                  {
  38.                                   $produit =$donnees['prdt'];
  39.               }
  40.                 //Recherche dans la table ''journal'', l'ensemble des produits ayants comme nom $produit
  41.              
  42.         $req = $bdd->prepare('SELECT * FROM journal WHERE designation= :designation');
  43.                           $req-> execute(array(
  44.                           'designation'=> $produit,
  45.                                  ));
  46.              
  47.                  // Creation du tableau d'affichage
  48.                                 echo$produit . '<br>';// titre du tableau
  49.        echo "<table border=\"\">";
  50.                                          //entête du tableau  
  51.                                          echo "<tr>";
  52.                                          echo "<th WIDTH=100 HEIGHT= 40>Entrée</th>";
  53.                                          echo "<th WIDTH=100 HEIGHT= 40>Sortie</th>";
  54.                                          echo "</tr>";
  55.                                          //fin de l'entête  
  56.    
  57.                                    
  58.      while ($donnees = $req->fetch())
  59.                  {
  60.                                
  61.          $entree =$donnees['entree'];
  62.          $sortie =$donnees['sortie'];
  63.            
  64.          
  65.                                          echo "<tr ALIGN=center>";
  66.                                      
  67.                                          echo "<td WIDTH=100 HEIGHT= 40>".$entree."</td>";
  68.                                          echo "<td WIDTH= 100 HEIGHT= 40>".$sortie."</td>";
  69.                                          echo '</tr>';
  70.         }
  71.                                  echo "</table>";
  72.        echo ' </br ><br >';
  73.                
  74.                
  75.         $ligneproduit = $ligneproduit +1;
  76.                          }
  77.                          $req->closeCursor();
  78.         echo 'le nombre de ligne est égale a : '.'<br />';
  79.  echo $ligneproduit. '<br/>';
  80. ?>
  81. </body>
  82. </html>


 
 
 

mood
Publicité
Posté le 04-05-2018 à 17:40:24  profilanswer
 

n°2314950
MaybeEijOr​Not
but someone at least
Posté le 04-05-2018 à 23:33:55  profilanswer
 

Bonjour,
 
Je ne suis pas certain de ce que tu veux faire mais je te laisse jeter un coup d'oeil à la commande ORDER BY en espérant que ça réponde à ton besoin.
Sinon pour effectuer des calculs tu peux aussi utiliser la commande GROUP BY.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2314964
antac
..
Posté le 05-05-2018 à 06:10:07  profilanswer
 

Déjà, que ce soit le libellé du produit en clé étrangère de ta table journal est une mauvaise chose. Il faudrait que ce soit l'id du produit.
Ensuite tu peux tout faire avec une requête avec une jointure et un order by et dans la boucle de résultat, constituer tes tableaux (suffit d utiliser une variable qui va servir à comparer le produit courant du précédent)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Performance de ma table

 

Sujets relatifs
[MySQL] Supprimer toutes les contraintes d'une tableconseil pour établir MCD relations table access
Table ou achievements/succèsProbleme performance et structure de donnees avec MongoDB
INDEX est obligatoire pour afficher contenu de la table ?comment copier automatiquement ID créé dans une 2ème table ?
Transferer des données d’une table vers une autre table via checkboxpassage de table de grande taille
lister les champs d'une table en connexion odbc[PostgreSQL] Alias de table et performance
Plus de sujets relatifs à : Performance de ma table


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR