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 :

[SQL] Probleme requete sql (jointure)


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 36
    Points
    36
    Par défaut [SQL] Probleme requete sql (jointure)
    Bonjour,

    Je rencontre un problème avec une requete sql... Je n'arrive pas à faire une jointure correcte.

    But de la requete : afficher une liste d'artiste (à partir de la table interprete) tout en allant cherché une photo correspondante (dans la table interprete_photo)

    Il s'agit d'une double requete. Cette double requete fonctionne correctement. Aussi, j'aimerais utiliser une jointure pour ne faire qu'une seule requete php :

    $req = mysql_query("SELECT idinterprete,vu FROM interprete ORDER BY vu DESC LIMIT $start,$limit");

    while($row = mysql_fetch_array($req)){

    $req2 = mysql_query("SELECT interprete_photo.id,interprete_photo.idinterprete,interprete_photo.nom FROM interprete_photo WHERE interprete_photo.idinterprete = '".$row['idinterprete']."' ORDER BY rand() LIMIT 1");
    $photo = mysql_fetch_array($req2);

    echo 'dgdfgdfgdgd';
    }
    Cette double requette affiche correctement la liste des artistes en les classant par 'vu' avec une photo correspondante à l'artiste affiché :
    peter
    franck
    roger
    robert
    etc...

    Là, il s'agit de ma requete jointure sql (afin de ne faire qu'une seule requete) qui inclus la liste des artistes/photos correspondant :
    $req = mysql_query("SELECT interprete.idinterprete,interprete.vu,interprete_photo.id,interprete_photo.idinterprete,interprete_photo.nom FROM interprete,interprete_photo WHERE interprete.idinterprete = interprete_photo.idinterprete ORDER BY vu DESC LIMIT $start,$limit");
    Cette requete ne fonctionne pas correctement. Elle affiche autant de fois le nom de l'interprète que de photos lui appartenant :
    peter
    peter
    peter
    peter
    franck
    franck
    roger
    roger
    roger
    roger
    roger
    roger
    roger
    roger
    robert
    etc...

    J'aimerais qu'elle affiche d'une part la liste des interprètes en fonction de 'vu' et qu'elle aille cherche dans la bdd interprete_photo, une photo (au hasard) pour chaque interprète affiché.

    Je ne sais pas ou cela coince dans ma jointure . Quelqu'un pourrait me dire pourquoi svp ? Je dois m'y prendre mal

    Merci !

    PS : les variables $start et $limit servent pour les numéros de page.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut GROUP BY et LEFT JOIN
    C'est bien ce qu'est sensée faire une jointure... Si tu fais une jointure normale (avec un where comme tu as fait) entre deux tables : si un interprète n'a aucune photo il n'apparait pas, s'il a 10 photos il apparait 10 fois.
    Si tu ne veux qu'une ligne par interprete tu peux utiliser une fonction d'agrégation sur la photo par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT i.* MAX(p.id) FROM interprete i,interprete_photo p WHERE i.idinterprete = p.idinterprete
    GROUP BY i.*
    Enfin, si tu veux que meme si l'interprete n'a pas de photo il apparaisse, tu dois utiliser une jointure gauche (ou droite...). Dans ce cas tu enleves le WHERE et tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .... FROM interprete i LEFT JOIN interprete_photo p ON i.idinterprete = p.idinterprete.

  3. #3
    Nouveau membre du Club Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    Salut

    (dsl pour le retard de ma réponse j'ai tout mis de coté depuis un mois... j'avais bcp de travail et je n'ai pu retoucher au code )

    Est ce que tu pourrais stp me décrire en détail ta première requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT i.* MAX(p.id) FROM interprete i,interprete_photo p WHERE i.idinterprete = p.idinterprete
    GROUP BY i.*
    SELECT i.* => Selectionnes tous les champs de la table interprete ?
    MAX(p.id) => ayant au moins un id dans la table interprete_photo ?

    J'ai essayé de la mettre en place, mais cela ne me retourne aucun résultat.

  4. #4
    Nouveau membre du Club Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 36
    Points
    36
    Par défaut
    A cette requete :

    $req = mysql_query("SELECT interprete.idinterprete,interprete.vu,interprete_photo.id,interprete_photo.idinterprete,interprete_photo.nom FROM interprete,interprete_photo WHERE interprete.idinterprete = interprete_photo.idinterprete ORDER BY vu DESC LIMIT $start,$limit");
    Je viens d'ajouter un 'GROUP BY interprete_photo.idinterprete' avant 'ORDER BY vu) et cela fonctionne ^^

    Est ce que cette requete est correcte ?

    $req = mysql_query("SELECT interprete.idinterprete,interprete.vu,interprete_photo.id,interprete_photo.idinterprete,interprete_photo.nom FROM interprete,interprete_photo WHERE interprete.idinterprete = interprete_photo.idinterprete GROUP BY interprete_photo.idinterprete ORDER BY vu DESC LIMIT $start,$limit");

Discussions similaires

  1. [SQL] probleme requete sql
    Par super-java dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/10/2007, 13h55
  2. [SQL] probleme requete sql
    Par tondeuz dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 05/06/2007, 11h26
  3. [SQL] Probleme requete SQL HELP
    Par sephirothmana dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 16/06/2006, 15h50
  4. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25
  5. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 11h41

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