Jump to content
Sign in to follow this  
Lentreprenaute

while appel d'une autre table dans la boucle?

Rate this topic

Recommended Posts

$select = 'select CategoryID,PageID  FROM Categories WHERE CategoryID=1 ORDER BY CategoryID... 
while($row = mysql_feCh_array($result)) {
   // $select = 'select price,PageID  FROM Pages WHERE PageID=$row['PageID'];
echo '<tr>';
       echo '<td>'.$row['CategoryID'].'</td>';
       echo '<td>'.$row['PageID'].'-'.$row['price'].'</td>';
       echo '</tr>'."\n";
   }

Bonjour,

je voudrais appeler une autre table dans le while pour extraire d'autres données correspondantes, chaque "$row['PageID']." me donne donc un chiffre pour aller chercher d'autres infos dans une autre table, comme je procede peu avec differentes tables, pouvez m'aider me donner un exemple pour proceder proprement.

Cordialement

Florent

Share this post


Link to post
Share on other sites

bonjour ...

alors comme ca (si j'ai bien compris ton post) tu devrais t'en sortir.

$req=mysql_query(SELECT ID FROM .....);
while ($parcours=mysql_fetch_array($req))
{
  $req2=mysql_query(SELECT INFO FROM ... WHERE ID=$parcours[ID]);
  etc...
}

Cordialement

Share this post


Link to post
Share on other sites

et bien tu as l'air bien parti là pourtant

enfin sur le bon chemin

tu ajoutes un mysql_query() et un mysql-fetch_array dans la bouche de ton while et c bon

$select = 'select CategoryID,PageID  FROM Categories WHERE CategoryID=1 ORDER BY CategoryID... 
while($row = mysql_feCh_array($result)) {
       $select2 = 'select price,PageID  FROM Pages WHERE PageID=$row['PageID'];
       $row2 = mysql_fetch_array(mysql_query($select)
       echo '<tr>';
       echo '<td>'.$row['CategoryID'].'</td>';
       echo '<td>'.$row['PageID'].'-'.$row2['price'].'</td>';
       echo '</tr>'."\n";
   }

Sinon tu peux aussi faire une requete multi table

select Categories.CategoryID, Categories.PageID, Pages.price from Categories, Prices Where Categories.PageID=Pages.PageID ANDCategoryID=1 ORDER BY CategoryID Group BY Categories.PageID

Voila quelque chose dans ce genre là

tu peux remarquer que je fais la jointure entre les 2 tables avec Categories.PageID=Pages.PageID et le GROUP BY permet d'eviter les doublons

Voila 2 solutions différentes, ya pas vraiment 1 meilleur que l'autre

C'est toi qui choisi

Share this post


Link to post
Share on other sites

merci pour vos reponses,

j'ai une preference pour le code 1, c'est vrai que j'etais pas loin :o) mais je voulais savoir aussi si c'etait une bonne methode, histoire de coder mon petit truc proprement :o) .

Bien a vous,

Florent' s bozo fan ;)

Share this post


Link to post
Share on other sites
merci pour vos reponses,

j'ai une preference pour le code 1, c'est vrai que j'etais pas loin :o) mais je voulais savoir aussi si c'etait une bonne methode, histoire de coder mon petit truc proprement :o) .

Bien a vous,

Florent' s bozo fan  ;)

<{POST_SNAPBACK}>

Choisit le code 2 :)

Règle de base : on ne met jamais une requête SQL dans une boucle while !

En terme de performance c'est épouvantable.

Pour ramener 50 lignes, tu vas faire 50 requêtes au lieu d'une seule.

Si ta base est bien optimisé, aves les bons index, le code 2 devrait être plus performant. Compare les 2 solutions sur ton système.

Tant que la charge de ton serveur ne sera pas trop importante, tout se passera bien.

Et puis un jour tu chercheras à comprendre pourquoi ton appli ce met à ramer.

J'impose la règle de base comme règle stricte de codage à tout mes développeurs.

Comme tout règle elle souffre de quelques exceptions que nous cherchons à garder... exceptionelles :)

Share this post


Link to post
Share on other sites

Bonjour,

J'intervient juste pour appuyer les propos de Anorci, le mieux est d'adopter la 2ème solution.

La 1ère consiste à faire ce que peux faire le gestionnaire de base de données. Il le fera mieux et plus rapidement. Alors pourquoi s'en priver ? ;)

Share this post


Link to post
Share on other sites

d'accord avec Norseb et Anorci, pour optimiser tu peux aussi écrire la requête SQl dans une procédure stockée (si mysql5).

Gain de rapidité en exécution puisque le plan de requête est précompilé.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...