Votre question

PHP et boucles imbriquées

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
16 Mai 2005 16:12:14

bonjour!!
voilà j'ai un pt prob et comme ça fait des heures que je cherche une solution, je me décide à demander un peu d'aide!
j'ai une base de données avec 2 tables
une pour les livres et leur caractéristiques (annee auteur...) et une autre avec des notes attribuées par les internautes
la jonction entre les 2 est le "code" du livre (present ds les 2 tables..)

je voudrai afficher tte la liste de mes livres et afficher à coté de ceux qui en ont les notes ainsi que les noms des internautes qui ont mis des notes

mon idée c'etait de chercher d'abord tte la liste des livres puis pour chaque livre (avec son code unique) chercher les notes dans la 2eme table
mais ça ne marche pas..comment puis je procéder?

voici le code auquel j'avais pensé


$db = @mysql_connect("$host","$base","$passe");
$select_base=@mysql_selectdb("$base");
$sql="SELEC * FROM LIVRE order by ANNEE";
$res=mysql_query($sql, $db);

while ($ligne = mysql_fetch_object ($res))
{
$CODE=$ligne->CODE;
print "<tr><td class=\"clair\">$ligne->TITRE ";

$sql1="SELEC * FROM NOTE where $CODE = CODE";
$res1=mysql_query($sql1, $db);
while ($ligne1 = mysql_fetch_object ($res1))
{
print "<td class=\"clair\">$ligne1->NOM, $ligne1->NOTE</td>";
}
mysql_free_result ($res1);
print "</tr>";

}
mysql_free_result ($res);


merci par avance!!!

Autres pages sur : php boucles imbriquees

16 Mai 2005 17:00:21

Essay polutot une requête multitable, c'est beaucoup plus leger pour MySQL

$sql = "SELEC l.*, n.* FROM `LIVRE` AS l LEFT JOIN `NOTE` AS n ON l.`CODE`=n.`CODE` ORDER BY l.`ANNEE`";

(oublie pas de changer SELEC par sa vrai valeur, avec un 'T' à la fin)

Voilà, ceci te sortira ce que tu cherche en une seule requête, fais des essais sous phpMyAdmin pour voir si ca te convient.

Amicalement
16 Mai 2005 17:54:58

D'abord merci bcp pour la reponse!
mais le souci c est que je voulais faire apparaitre d'un cote le nom du livre et de l'autre toutes les notes; alors que là ça me fait apparaitre
le livre plus une note
puis le meme livre avec une autre note (s'il en avait plusieurs)
peux tu m'aider?
Contenus similaires
16 Mai 2005 18:10:36

Dans ce cas il faut faire plutôt :
  1. <?php
  2. // Requête SQL
  3. $sql = "SELEC l.*, n.* FROM `LIVRE` AS l, `NOTE` AS n WHERE l.`CODE`=n.`CODE` ORDER BY l.`ANNEE`";
  4.  
  5. // Execution de la requête SQL
  6. $res = mysql_query($sql);
  7.  
  8. $current_code = false; // definition de la variabler $current_code pour la tester ensuite
  9.  
  10. // Boucle pour récuperer les données retournées par SQL
  11. while($row = mysql_fetch_array($res)){
  12. if($current_code != $row["CODE"]){
  13. $current_code = $row["CODE"];
  14. // ici les instructions quand on tombe sur un nouveau livre
  15. }else{
  16. // ici les instructions quand on tombe sur une note sur un livre déjà affiché
  17. }
  18. }
  19. ?>
16 Mai 2005 18:50:51

je viens d'essayer mais ça me met
Parse error: parse error, unexpected $
et je ne sais pas d'où vient l'erreur

je te mets le code que j'ai tapé avec le t pour select, tu y verras sans doute plus clair que moi

$db = @mysql_connect("$host","$base","$passe");
$select_base=@mysql_selectdb("$base");
$sql = "SELEC l.*, n.* FROM `LIVRE` AS l LEFT JOIN `NOTE` AS n ON l.`CODE`=n.`CODE` ORDER BY l.`ANNEE`";
$res=mysql_query($sql, $db);

$current_code = false;
while($row = mysql_fetch_array($res)){
if($current_code != $row["CODE"]){
$current_code = $row["CODE"];
print "<tr><td class=\"clair\">$row[\"ANNEE\"] $row[\"NOM\"] $row[\"NOTE\"]</td>";
}else{
print "<td class=\"clair\">$row[\"NOM\"] $row[\"NOTE\"]</td>";
}
}
print "</tr>";

}
mysql_free_result ($res);

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS