While imbriqués

beru002 Messages postés 497 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de m'énerver sur un truc qui pourtant ne paraît pas bien compliqué, à la base... mais l'habit ne fait pas le moine!
Voilà, j'ai une table "livres". Dans cette table, tous les champs du livre: titre, auteur, etc...
Sur une page de mon site, j'aimerais les ranger par "theme"... avec le titre du thème, bien sûr!
Avec SELECT DISTINCT theme, pas de souci, j'ai mes titres... mais ensuite, sous chaque titre "thème1", thème2", etc... j'aimerais avoir la liste des livres qui ont ce thème... et c'est là que je bloque. à priori, il ne suffirait que de refaire un while, avec
$theme=$donnees['theme']
SELECT * FROM livres WHERE theme=$theme

mais ça buggue... il ne veut pas de fetch là-dessus. peut-être y a-t-il une manière particulière d'embriquer les while? je n'ai trouvé de solution un peu nulle part, donc je viens poser ma question ici.

voici, plus précisément, mon code:

<?php
$reponse=$bdd->query('SELECT DISTINCT theme FROM livres ORDER BY theme'); 

while ($donnees=$reponse->fetch())
{ ?>
<h1 id="ancre_<?php echo stripslashes($donnees['theme']); ?>"><?php echo stripslashes($donnees['theme']); ?></h1><br /><br />
<!--ceci affiche les titres des parties avec des ancres-->

<?php
$theme=$donnees['theme'];
$requete=$bdd->query('SELECT * FROM livres WHERE theme=$theme');

while ($donnees2=$requete->fetch()) {

echo $donnees2['titre']. '<br />';
}
$requete->closeCursor();
}
$reponse->closeCursor();
?>



A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Deux problèmes dans cette ligne :
$requete=$bdd->query('SELECT * FROM livres WHERE theme=$theme');

1) les simples quotes ' autour de la requête empêchent PHP d'interpréter la variable $theme. Il faut plutôt utiliser "

2) Dans la requête SQL, une chaîne de caractères doit être délimitée par des simples quotes '

Du coup, cette ligne devient :
$requete=$bdd->query("SELECT * FROM livres WHERE theme='$theme'");

Xavier

PS : il y avait d'autres possibilité, notamment en ne faisant qu'une seule boucle... mais bon ^^
0