Blocage de débutant sur une boucle

Blocage de débutant sur une boucle - PHP - Programmation

Marsh Posté le 19-02-2010 à 14:43:52    

Bonjour,
je vais aller droit au but. Je gère mes bandes dessinées avec la bdd mysql. J'ai deux tables : bd_albums qui regroupe mes albums et bd_series pour mes series.
 
Voilà comment elle se présente en simplifiant (pour bd_series):

Code :
  1. id_serie     titre_serie
  2.    11          Asterix
  3.    12         Lanfeust
  4.    13          Tintin


 
Pour bd_albums :

Code :
  1. id_album     numero_album       liens_id_serie
  2.    200            1                   12
  3.    201            2                   12
  4.    202            3                   11


Le lien entre les deux tables est donc (id_serie et liens_id_serie).
Maintenant, j'aimerais faire une liste des albums que je possède en affichant le titre de la série et le numéro :
Asterix : 1, 2, 3, 4, 7, 8, ...
Lanfeust : 2, 5, 9, 10, 11, 15, ...
...
 
J'ai fait cette requête :

Code :
  1. <?php
  2. $sql= "SELECT * FROM bd_series, bd_albums WHERE bd_series.id_serie = bd_albums.liens_id_serie ORDER BY titre_serie, numero";
  3. $result= mysql_query($sql);
  4. while($row = mysql_fetch_assoc ($result)){
  5.     $titre_serie = $row["titre_serie"];
  6.     $numero = $row["numero"];
  7.  
  8. echo"$titre_serie: $numero<br>";
  9. }
  10. ?>


 
Mais comme vous vous en doutez, je n'ai pas ce que je veux mais j'obtiens :
Astérix : 1
Astérix : 2
Astérix : 3
Astérix : 4
Astérix : 7
...
 
Bref, ce n'est pas en ligne mais en colonne. Je comprends bien où est le problème puisque je fais une boucle sur le titre de la série en plus d'en faire sur les numéros.
Mais je ne comprends quelle est la solution. Voilà pourquoi je viens vous demander de l'aide  :)  
 
Merci !
Maxime


Message édité par lofo7 le 19-02-2010 à 15:46:22
Reply

Marsh Posté le 19-02-2010 à 14:43:52   

Reply

Marsh Posté le 19-02-2010 à 15:08:53    

Bonjour.
 
La solution la plus simple, à mon avis, c'est de vérifier à chaque enregistrement si tu changes de série.
Exemple largement améliorable (gestion des sauts de lignes et des virgules, entre autres)

Code :
  1. <?php
  2. $sql= "SELECT * FROM bd_series, bd_albums WHERE bd_series.id_serie = bd_albums.liens_id_serie ORDER BY titre_serie, numero";
  3. $result= mysql_query($sql);
  4. $serie_en_cours = "";
  5. while($row = mysql_fetch_assoc ($result)){
  6.     $titre_serie = $row["titre_serie"];
  7.     $numero = $row["numero"];
  8.     if ($titre_serie !== $serie_en_cours) ) {
  9.         echo"<br>$titre_serie: ";
  10.         $serie_en_cours = $titre_serie;
  11.     }
  12.     echo $numero;
  13. }
  14. ?>


 
(Au passage : utilise la balise [ code=php] ...[ /code] plutôt que cpp, c'est plus clair  ;) )

Reply

Marsh Posté le 19-02-2010 à 15:51:02    

C'est bon j'ai changé la balise du code :).
J'avais l'idée d'incrémenter à chaque fois l'id_serie. Problème : si il y a des "trous" dans les enregistrements, je ne sais pas trop ce que ça aurait affiché.
Merci de ta réponse. C'est tout bête mais fallait trouver. Déjà, tu m'as mis sur la voie avec ce code, je vais rajouter ce que je veux dessus.


Message édité par lofo7 le 19-02-2010 à 15:51:26
Reply

Marsh Posté le 26-02-2010 à 15:25:10    

Un truc comme ça devrait te retourner, pour chaque série, 2 colonnes:

  • nom de la série
  • liste des numéros d'albums, séparés par une virgule (tu peux faire un explode() sur ce résultat pour avoir un tableau contenant chaque numéro d'album)
Code :
  1. SELECT bd_series.titre_serie, GROUP_CONCAT(bd_albums.numero_album) FROM bd_series, bd_albums WHERE bd_series.id_serie = bd_albums.liens_id_serie
  2. GROUP BY bd_series.titre_serie


pas testé mais c'est l'idée


---------------
www.TASOEUR.biz / "Le lundi au soleil, c'est une chose qu'on n'aura jamais." - Claude François.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed