PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-06-2010 07:41:48

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Boucle for et while imbriqué

Bonjour

Je souhaiterais savoir si il était possible, correct de faire une boucle while dans une boucle for (j'ai peur de boucler à l'infinie et planter mysql) ...

Je parcours un tableau avec for de cette façon :


for($i=0;$i<getSize();$i++)
{
$ret.='<tr><td width="70%" align="left" class="text_form_contact"><a class="link_noir" href="#">'.getLabelByPosition($i).'</a></td><td width="20%" class="text_form_contact">'.getPriceByPosition($i).' </td><td>€</td><td><a href="javascript:deleteByRef(\''.getRefByPosition($i).'\')" onclick="window.location.replace(\'panier_consulter.php\');"><img src="images/retire_panier.png" alt="panier" width="32" height="32" border="0"></a></td>';
}
 

mais je voudrais aller chercher dans ma base les informations de getLabelByPosition($i) qui est en fait l'ID du produit, un peu de cette façon :


for($i=0;$i<getSize();$i++)
{
$SQL_PRECISIONS = "SELECT modele FROM $TABLE_RECEP WHERE id = '".getLabelByPosition($i)."'";
$REQ_PRECISIONS = mysql_query($SQL_PRECISIONS) or die('Erreur SQL !<br SELECT>'.$SQL_PRECISIONS.'<br>'.mysql_error());
while($PRECISIONS = mysql_fetch_assoc($REQ_PRECISIONS))
{
$ret.='<tr><td width="70%" align="left" class="text_form_contact"><a class="link_noir" href="#">'.getLabelByPosition($i).' ('.$PRECISIONS['modele'].')</a></td><td width="20%" class="text_form_contact">'.getPriceByPosition($i).' </td><td>€</td><td><a href="javascript:deleteByRef(\''.getRefByPosition($i).'\')" onclick="window.location.replace(\'panier_consulter.php\');"><img src="images/retire_panier.png" alt="panier" width="32" height="32" border="0"></a></td>';
} // fin while
} // fin for
 

est ce que cela est raisonnable, y a t-il une autre solution pour ne pas charger mysql (j'avoue ne même pas avoir essayé par peur) ?

Merci à tous
Antho

Dernière modification par Anthotill (09-06-2010 07:42:02)

Hors ligne

#2 09-06-2010 08:38:12

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Boucle for et while imbriqué

Hum je pense que suivant le nombre tu risques en effet de surcharger, et surtout Apache pour le temps d'exécution.

Ne serais-ce pas possible de passer par un affichage page par page ?
Tu décomposerai donc ta boucle for en plusieurs.

Hors ligne

#3 10-06-2010 05:47:29

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Boucle for et while imbriqué

Bonjour

Merci pour ta réponse.

Il s'agit d'un récapitulatif de panier pour passer une commande, enfin plutôt établir un devis, je suis donc obligé de tout mettre sur la même page.

Est ce que quelqu'un a une idée à ce sujet ?

Merci
Antho

Hors ligne

#4 10-06-2010 10:00:13

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Boucle for et while imbriqué

Dans ce cas fais une requête récupérant toutes les données de ta table. C'est bourrin mais tout de même moins que de faire une requête pour chaque info.
Tu te construit un tableau avec les résultats et tu n'auras plus qu'à l'utiliser dans ta boucle.

Hors ligne

#5 12-06-2010 09:33:44

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Boucle for et while imbriqué

Bonjour

Ha oui exact je ne maîtrise pas trop les tableaux de ce type mais je vais essayer en tentant au maximum de réduire la requête parce qu'il risque d'y avoir plusieurs milliers de résultats si je la fait sans conditions bien précises.

Merci bien.

PS: Si quelqu'un a une autre idée ... :-)

Antho

Dernière modification par Anthotill (12-06-2010 09:34:15)

Hors ligne

#6 30-06-2010 08:19:11

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Boucle for et while imbriqué

Bonjour,

Anthotill a écrit :

Ha oui exact je ne maîtrise pas trop les tableaux de ce type mais je vais essayer en tentant au maximum de réduire la requête parce qu'il risque d'y avoir plusieurs milliers de résultats si je la fait sans conditions bien précises.

Merci bien.

C'est déjà ce que tu fais avec ta boucle $i=0 à $i=getsize().
Une seule requête est toujours préférable à plusieurs requêtes surtout si le nombre d'enregistrement est important. De plus, pas besoin de créer un tableau spécifique avec un $row=fetchrow(), $row représentant déjà le tableau que tu recherches.
Si tu cherches à savoir comment faire une seule requête à partir de ton panier (remplissage non prévisible), il faut passer par une requête dynamique.

Dernière modification par Jc (30-06-2010 08:21:52)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums