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 sur Boucle While après un LEFT JOIN [MySQL]


Sujet :

PHP & Base de données

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut Problème sur Boucle While après un LEFT JOIN
    Bonjour,
    j'ai un site qui répertorie les différents styles de jazz, et pour chaque style il donne une liste d'artistes importants. J'ai donc fait la requête suivante pour récupérer en même temps les données de ma table Styles et celles de ma table Artistes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"]."'");
    Ensuite j'affiche les informations sur le style avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $donnees = mysql_fetch_array($reponse);
    echo $donnees['nom_style'];
    Et pour afficher les différents artistes correspondant à ce style, j'ai une boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while ($donnees_artiste = mysql_fetch_array($reponse)) {
    echo $donnees_artiste['nom_artiste']; }
    Je ne comprends pas pourquoi cette boucle ne m'affiche jamais plus d'un résultat... même lorsqu'il y en a 10 à afficher...

    Quelqu'un peut m'aider ?

    Mmmmerci d'avance,

    Mathieu.

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    Sans balise au-dessus des balises php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <table border="1" cellpadding="2" cellspacing="2">
     
    <tr>
    <th>table Styles</th>
    <th>table Artistes</th>
    </tr>
    Avec balise php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($donnees_artiste = mysql_fetch_row($reponse))
    {
    $table Styles = $row[x];  // a changé le x par le numéro de ta colonne tu peux ajouter autant de colonne a afficher que ta ou tes tables en possede juste a ajouté une ligne dans chaque partie avec les infos qui vont bien
    $N°série = $row[x];
     
     
    // Affichage des résultats sous forme de tableaux avec en-têtes définies plus haut
    echo "<tr>\n
    <td>table Styles</td>\n
    <td>table Artistes</td>\n
    </tr>\n";
     
    }
    C' est surement un poil plus chiant que ton mysql_fetch_array($reponse) mais la je peux te certifié ça marche apres pour ma part j' ai pas encore les compétences et niveau pour le faire en mysql_fetch_array($reponse))

    J' espere ça pourra déjà t' aider...

    Sinon ben documentation :
    http://eusebius.developpez.com/phpmysql-base/

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    Merci bien de ce tuyau, mais si possible j'aimerais garder un mysql_fetch_array...
    J'ai constaté que ma boucle while fonctionne lorsque je redéclare "$reponse =mysql_query etc..." juste avant.
    Voici mon nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"] ."' OR styles_table.nom_style='". $_POST["nom_style"] ."'"); 
     
    $donnees = mysql_fetch_array($reponse);
    echo $donnees['nom_style']; 
     
     
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"] ."' OR styles_table.nom_style='". $_POST["nom_style"] ."'"); 
     
    while ($donnees = mysql_fetch_array($reponse)) {
    echo $donnees['nom_artiste']; }
    Ma question : est-il possible d'éviter de redéclarer $reponse ?

    Merci encore ! (et désolé de m'entêter ! )

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Quand tu "redéclares" $response (je dirai plutot que tu exécutes la requete a nouveau) ton while t'affiche 10 résultats alors qu'avant ca n'était pas le cas??
    J'aurai plutot dit qu'il t'affichait toujours un résultat je ne vois pas de raison pour que cela change vu que tu effectues la meme requete a chaque fois.

    Cependant, il faut éviter de faire un premier fetch() en dehors du while et ensuite faire un while.

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    C'est pourtant ce qui se passe : la seule façon que ma boucle fonctionne (cad qu'elle me renvoie tous les résultats) c'est de réexecuter "$reponse =mysql_query...."

    Par ailleurs, j'ai mis un premier fetch() en dehors du while parce-que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($donnees = mysql_fetch_array($reponse)) {
    echo $donnees['nom_style']; 
    echo $donnees['nom_artiste']; }
    alors le nom du style est retourné pour chaque artiste...

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par matperino
    C'est pourtant ce qui se passe : la seule façon que ma boucle fonctionne (cad qu'elle me renvoie tous les résultats) c'est de réexecuter "$reponse =mysql_query...."

    Par ailleurs, j'ai mis un premier fetch() en dehors du while parce-que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($donnees = mysql_fetch_array($reponse)) {
    echo $donnees['nom_style']; 
    echo $donnees['nom_artiste']; }
    alors le nom du style est retourné pour chaque artiste...
    Je ne comprends vraiment pas tout, est ce que le probleme est qu'il te manque un résultat si tu ne refais pas une query ou qu'il n'y a aucun résultat si tu ne refais pas une query?

    Par ailleurs, pour le style, il suffit que tu fasses un echo seulement pour le premier élément, ou encore que tu passes ta boucle while en do{...} while() si tu tiens vraiment a sortir le echo de la boucle. Mais executer deux fois la meme requete de suite est une perte de temps et de ressources.

    EDIT :
    Est ce qu'entre ton premier $response = mysql_query() et la boucle while() tu as d'autres requetes?? (je parle du script avant que tu décides de refaire un second query())

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    Le probleme est que si je ne refais pas une query je n'ai qu'UN SEUL artiste qui est retourné, même s'il y en a 10 dans ma table...

    Pour répondre à ta dernière question, voici mon code actuel (je l'ai simplifié au maximum pour les tests ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"] ."' OR styles_table.nom_style='". $_POST["nom_style"] ."'"); 
     
    $donnees = mysql_fetch_array($reponse);
    echo $donnees['nom_style']; 
     
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"] ."' OR styles_table.nom_style='". $_POST["nom_style"] ."'"); 
     
    while ($donnees = mysql_fetch_array($reponse)) {
    echo $donnees['nom_artiste']; }

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    J'aurai tendance a dire que ca n'est pas possible. Tu fais deux fois la meme requete, dans le premier cas elle te renvoie UN résultat, dans le second cas elle t'en renvoie 10, je ne vois aucune raison à ça.

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    C'est peut être parce-que je demande d'afficher des résultats provenant de 2 tables différentes (LEFT JOIN) ?

  10. #10
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Franchement je ne pense pas que ca ait un lien quelconque.
    Dans tous les cas, faire deux fois la requete de suite est inutile, insère dans ton while la condition spéciale pour afficher le genre, ca te retirera bien des soucis.

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    insère dans ton while la condition spéciale pour afficher le genre
    hmm... que veux tu dire par là ?

  12. #12
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par matperino
    hmm... que veux tu dire par là ?
    Ce que j'ai expliqué plus haut...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $reponse =mysql_query("SELECT * FROM styles_table LEFT JOIN artistes_table ON (styles_table.nom_style = artistes_table.nom_style) WHERE styles_table.nom_style='". $_GET["genre"] ."' OR styles_table.nom_style='". $_POST["nom_style"] ."'"); 
     
     
    $affiche = false;
    while ($donnees = mysql_fetch_array($reponse)) 
    {
    if($affiche == false);
      {
      echo $donnees['nom_style']; 
     
      $affiche = true;
      }
    echo $donnees['nom_artiste']; 
    }

  13. #13
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 90
    Points : 57
    Points
    57
    Par défaut
    ça marche, merci !!

    Pour ceux qui voudraient réutiliser l'astuce : il y avait un juste un ; de trop dans ton modèle :
    if($affiche == false);

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

Discussions similaires

  1. [MySQL] Problème sur boucle WHILE
    Par t671 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 19/09/2012, 22h37
  2. problème sur la feuille après execution de la macro
    Par vacknov dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2007, 08h16
  3. [MySQL] Problème de boucle while
    Par Justin_C dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/12/2006, 19h16
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  5. [MySQL] Problème de boucle while sur base de données
    Par Darhyl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/05/2006, 15h11

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