Tom's Guide > Forum > Programmation > PHP et boucles imbriquées
Mot :    Pseudo :           
 

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!!!

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à Cool@IDN

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?

Répondre à dav29@IDN

Dans ce cas il faut faire plutôt :

Code :
  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. // Execution de la requête SQL
  5. $res = mysql_query($sql);
  6. $current_code = false; // definition de la variabler $current_code pour la tester ensuite
  7. // Boucle pour récuperer les données retournées par SQL
  8. while($row = mysql_fetch_array($res)){
  9. if($current_code != $row["CODE"]){
  10. $current_code = $row["CODE"];
  11. // ici les instructions quand on tombe sur un nouveau livre
  12. }else{
  13. // ici les instructions quand on tombe sur une note sur un livre déjà affiché
  14. }
  15. }
  16. ?>

Répondre à Cool@IDN

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);

Répondre à dav29@IDN
Tom's Guide > Forum > Programmation > PHP et boucles imbriquées
Aller à :

Il y a 209 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens