IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème de SQL dans une boucle [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Problème de SQL dans une boucle
    Bonjour à tous.

    Voilà bien une semaine que je me creuse la cervelle sur un code sans grand succès.

    Voici ma situation : Je suis en train de créer un site qui répertorie la discographie des groupes de rock (c'est pour un projet scolaire).
    Chaque groupe aura droit à une page, et sur cette page seront affichés les titres des albums suivis des titres des chansons contenues dedans.

    Voici une url pour vous donner une idée de la chose : http://rockdatabase.free.fr/metallica.php (ne faites pas attention à l'anarchie ambiante, je viens de commencer ).


    Comme vous le voyez, j'ai un problème d'affichage avec les chansons du cadre. Je voudrais que les chansons d'un même album soient contenues dans le même cadre que ce dernier, mais là il me crée un nouveau cadre pour chaque chanson. Le seul point positif, c'est que pour l'instant les chansons sont au moins associées au titre de l'album correspondant.


    Pour l'instant j'ai crée deux tables dans ma BDD : La table "album" et la table "chanson".

    Album contient les champs suivants : id_album , titre_album , annee_sortie , nbre_chansons.
    Chanson contient les champs suivants : id_chanson, titre_chanson , num_piste , ref_album.

    ref_album contient à chaque fois le chiffre de id_album de l'album concerné.


    Enfin voici le code de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php 
    $reponse = mysql_query("SELECT * FROM album, chanson WHERE album.id_album = chanson.ref_album");
    ?>
     
    [...]
     
    <?php 
    while ($donnees = mysql_fetch_array($reponse) )
    {
    ?>		
        <div class="cadre_chansons">
    	<?php echo $donnees['titre_album']; ?>
    	<?php echo $donnees['titre_chanson']; ?>
        </div>
    <?php
    }
    ?>
    Je pense savoir comment faire : il faudrait placer une seconde boucle dans la première boucle juste après le "titre_album", spécifiant d'afficher toutes les chansons de l'album en question dont le ref_album est équivalent au id_album. Seulement je n'ai aucune idée de comment coder ni agencer tout ça.

    Voilà à peu près où j'en suis. Je nage complètement depuis plusieurs jours pour afficher correctement ce bout de code, sans succès.

    Toute aide serait très grandement appréciée. Merci.

  2. #2
    Nouveau membre du Club Avatar de Vetchostar
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 39
    Points
    39
    Par défaut
    slt d'abords j'aimerais savoir comment tu fais la laision entre tes deux table car je ne vois pas de lien .

    Ensuite pourquoi tu ouvre et ferme 2 fois ta balise php.

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    Je penses que tu devrais effectivement faire deux boucles.

    Mais également deux requêtes :

    La première pour récupérer tout les ID des album
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query1 = 'SELECT id_album FROM album' ;
    pour chaque résultat de cette requête tu passe l'ID dans une seconde requête te permettant de récupérer les chansons pour un album

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query2 = 'SELECT * FROM chanson WHERE chanson.ref_album = '.$response['id_album'] ;

  4. #4
    Membre régulier Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Points : 108
    Points
    108
    Par défaut Peut être ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php 
       $req_1 ( "SELECT DISTINCT(titre_album) FROM mabase ")
       $result_1 = mysql_query($req_1);
           while ($row_1 = mysql_fetch_object ($result_1))
               {$album = $row->titre_album ;
    echo "<div class="cadre_chansons">";
    echo "$album" ;
       $req_2 ( "SELECT DISTINCT(titre_chanson) FROM mabase WHERE titre_album ='$album' ")
       $result_2 = mysql_query($req_2);
           while ($row_2 = mysql_fetch_object ($result_2))
               {$titre = $row_2->titre_album ;
    echo "$titre" ;
       }
    echo "</div>";
    }
    ?>
    NON testé ....

  5. #5
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Concernant les tables :
    Il te manque une table avec les groupes.
    Il te manque un champ id_groupe dans la table album.
    Enfin il faut supprimer nbre_chansons dans la table album ; tu récupereras le nombre de chanson avec la table chanson.

    Il suffit d'une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    $sql = "SELECT * ";
    $sql.= "FROM album, chanson ";
    $sql.= "WHERE album.id_album = chanson.ref_album ";
    $sql.= "AND album.id_groupe = '" . $groupe_ID . "' ";
     
    $reponse = mysql_query($sql);
     
    $ex_$id_album = null;
     
    while ($donnees = mysql_fetch_array($reponse) ) {
      $id_album = $donnees['id_album']; 
      $titre_album = $donnees['titre_album']; 
      $titre_chanson= $donnees['titre_chanson']; 
     
      //changement d'album
      if ($ex_$id_album != $id_album)
       echo "<h1>" . $donnees['titre_album'] . "</h1>"; 
     
      echo $donnees['titre_chanson'] . "<br />";
      $ex_id_album = $id_album ;
    }
    ?>
    Gillou

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    @Vetchostar :

    - Qu'est-ce que tu entends par "faire une liaison" entre deux tables ? Je dois avouer que pour l'instant ma connaissance du langage SQL est assez limitée.
    Sinon dans ma table chanson j'ai crée un champ intitulé "ref_album" qui contient la même valeur qu'un id_album pour la chanson associée. Mais je sais pas si on parle du même truc.

    - Si j'ai ouvert deux fois une balise php, c'est parce ce que j'ai voulu vous épargner tout le code XHTML étranger au problème qu'il y avait entre les deux balises. Mais effectivement, dans mon exemple une balise aurait suffit.

    @bugz57 :

    Je pense avoir compris le raisonnement, mais il y a juste une chose qui me chiffonne : D'où sort le $response ?
    Est-ce que c'est la ligne juste en-dessous de la première requête de sélection comme dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query1 = 'SELECT id_album FROM album' ;
    $response = mysql_query($query1);
    @nimbus_77 :

    Il va me falloir un petit moment pour cogiter sur ce code avec mon niveau de débutant, mais la procédure a l'air semblable aussi avec deux boucles et deux requêtes.

    @LeGilou :

    - Oui j'ai déjà une table groupe dans ma base, mais comme pour l'instant j'ai juste deux albums et 20 chansons dans ma base, je n'avais pas pensé à le préciser. Mais ça me sera utile pour la suite, merci.

    - En ce qui concerne le code, il y a une variable que je ne comprends pas : à quoi correspond $ex_$id_album ?
    Et si je ne rajoute pas une deuxième boucle entre l'affichage du titre de l'album et des chansons, il risque de me répéter le titre de l'album à chaque nouvelle chanson, non ?


    En tout cas merci pour vos réponses, ça fait super plaisir. Je vais tester tout ça et je vous tiens au courant. Un grand merci à vous encore une fois.

  7. #7
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    En ce qui concerne le code, il y a une variable que je ne comprends pas : à quoi correspond $ex_$id_album ?
    J'ai fais une erreur. C'est pas $ex_$id_album, c'est $ex_id_album.

    Et si je ne rajoute pas une deuxième boucle entre l'affichage du titre de l'album et des chansons, il risque de me répéter le titre de l'album à chaque nouvelle chanson, non ?
    C'est justement pour ca.
    je parcours tous les résultats.
    $ex_id_album, c'est l'id de l'album du tour précédent.
    Si il est différent du l'id de l'album du tour en cours, c'est que nous sommes sur un autre album, donc on affiche le titre.

    Gillou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'exécution sql dans une boucle
    Par zerros dans le forum SGBD
    Réponses: 3
    Dernier message: 16/01/2013, 15h15
  2. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  3. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo