par
sadeq » 31 août 2008, 23:14
On peut trier en utilisant SQL par Order By dans la condition de pouvoir sélectionner l'ensemble des enregistrement nécessaires à l'affichage et non quand on fait un Where ID=... qui normalement ne retourne qu'un seul enregistrement.
C'est ce Where ID=... qui gène d'autant plus qu'il t'oblige à mettre la requête dans une boucle qui calcule la valeur de l'ID. Ce qui diminue les performances de ton script puisque ta boucle exécute la requête plusieurs fois et ça fait plusieurs appels vers la BD.
En revanche, on peut, au regard de ton script, arriver à simplifier tout ça. Voilà :
On remarque que la boucle :
for ($i=1;$i<$num;$i++)
{
....
calcule une suite de nombres allant de 1 à $num où chaque nombre représenté par $i sert comme ID pour filtrer la requête SELECT.
On remarque aussi que $num est le nombre d'enregistrements retourné par la première requête :
$link = "SELECT prod FROM month";
Si l'on veut exécuter la requête une seule fois et qu'il retourne tous les enregistrements escomptés, la solution est d'éliminer la boucle du compteur $i qui gène et de donner cette tâche à la requête SQL elle même en changeant sa condition.
Voici comment :
$query = mysql_query("SELECT prod, quant, temp1, peremption, temp3, temp4, temp5, temp6, temp7 FROM stock WHERE ID>=1 AND ID<$num ORDER BY peremption");
Le Where ici extrait tous les ID compris entre 1 et $num (exclu) comme faisait la boucle $i.
L'avantage de cette requête est :
1. Elle va s'exécuter 1 fois au lieu de plusieurs fois dans ton cas où la requête est dans la boucle
2. Elle retourne plusieurs enregistrements trié de surcroit (ORDER BY)
Il reste finalement à lire le résultat de cette requête par un While et un fetch pour réaliser l'affichage de la table HTML ligne par ligne.
Allez, courage !
On peut trier en utilisant SQL par Order By dans la condition de pouvoir sélectionner l'ensemble des enregistrement nécessaires à l'affichage et non quand on fait un Where ID=... qui normalement ne retourne qu'un seul enregistrement.
C'est ce Where ID=... qui gène d'autant plus qu'il t'oblige à mettre la requête dans une boucle qui calcule la valeur de l'ID. Ce qui diminue les performances de ton script puisque ta boucle exécute la requête plusieurs fois et ça fait plusieurs appels vers la BD.
En revanche, on peut, au regard de ton script, arriver à simplifier tout ça. Voilà :
On remarque que la boucle :
[php]
for ($i=1;$i<$num;$i++)
{
....
[/php]
calcule une suite de nombres allant de 1 à $num où chaque nombre représenté par $i sert comme ID pour filtrer la requête SELECT.
On remarque aussi que $num est le nombre d'enregistrements retourné par la première requête :
[php]$link = "SELECT prod FROM month";[/php]
Si l'on veut exécuter la requête une seule fois et qu'il retourne tous les enregistrements escomptés, la solution est d'éliminer la boucle du compteur $i qui gène et de donner cette tâche à la requête SQL elle même en changeant sa condition.
Voici comment :
[php]$query = mysql_query("SELECT prod, quant, temp1, peremption, temp3, temp4, temp5, temp6, temp7 FROM stock WHERE ID>=1 AND ID<$num ORDER BY peremption"); [/php]
Le Where ici extrait tous les ID compris entre 1 et $num (exclu) comme faisait la boucle $i.
L'avantage de cette requête est :
1. Elle va s'exécuter 1 fois au lieu de plusieurs fois dans ton cas où la requête est dans la boucle
2. Elle retourne plusieurs enregistrements trié de surcroit (ORDER BY)
Il reste finalement à lire le résultat de cette requête par un While et un fetch pour réaliser l'affichage de la table HTML ligne par ligne.
Allez, courage !