Lentreprenaute Posté 23 Février 2006 Posté 23 Février 2006 $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
MyMaty Posté 23 Février 2006 Posté 23 Février 2006 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
bozoleclown Posté 23 Février 2006 Posté 23 Février 2006 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
Lentreprenaute Posté 23 Février 2006 Auteur Posté 23 Février 2006 merci pour vos reponses, j'ai une preference pour le code 1, c'est vrai que j'etais pas loin ) mais je voulais savoir aussi si c'etait une bonne methode, histoire de coder mon petit truc proprement ) . Bien a vous, Florent' s bozo fan
Spidetra Posté 23 Février 2006 Posté 23 Février 2006 merci pour vos reponses, j'ai une preference pour le code 1, c'est vrai que j'etais pas loin ) mais je voulais savoir aussi si c'etait une bonne methode, histoire de coder mon petit truc proprement ) . 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
NorSeb Posté 24 Février 2006 Posté 24 Février 2006 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 ?
robinsonvendredi Posté 24 Février 2006 Posté 24 Février 2006 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é.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant