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 :

Requetes INNER JOIN afin d'alléger les requetes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut [Résolu] Requetes INNER JOIN afin d'alléger les requetes
    Bonjour,

    J'ai besoin d'une requete assez complexe pour continuer à travailler sur mon site. Le schéma est assez complexe, je prefere un beau dessin pour l'explication :

    http://www.ipclic.com/_shareimg/ccm_01.jpg

    Est ce que ce que je souhaite faire est réalisable ou dois je obligatoirement passer par des sous requetes ?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as du te tromper dans ta texte puisque tu fais déjà ta liaison sur le "sender" ; ca doit plutot être le comments.member_id dont tu veux la photo.

    Tu peux ajouter une deuxieme jointure vers members mais je ne peux pas t'en ecrire plus car ne pouvant pas copier ta requete, je ne vais pas non plus la ré-ecrire avec mes petits doigts
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    En fait, j'ai déjà la photo du member_id.

    Ce que je souhaites c'est récupérer le pseudo : member_login
    Ainsi que la photo : photo_filename
    De chaque messages étant donné que le member_id (destinataire du message) est toujours identique.

    Désolé pour la requete, c'est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM comments AS A INNER JOIN members AS B ON B.member_id=A.sender_member_id WHERE A.member_id='$pseudo_id'
    AND A.comment_active=1 ORDER BY A.comment_id DESC LIMIT 0,10

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les infos membres dans cette requete sont bien ceux du sender.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Alors je dois avoir un petit soucis dans ma requete, je l'ai légèrement modifié et ceci fonctionne mais pas tout à fait :

    Les messages affichés s'affichent comme ceci :
    Tant qu'il y'a des photos associées au sender_member_id 1 :
    Affichage du meme commentaire , N fois (tant qu'il y'a des photos associées)
    Et ensuite ca passe au second membre 2
    Affichage du meme commentaire , N photos (tant qu'il y'a des photos associées au membre 2)

    Donc en fait il y'a un problème de boucle que je n'arrive pas à résoudre ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "
    	SELECT * FROM comments AS A 
    	INNER JOIN members AS B ON A.sender_member_id = B.member_id
    	INNER JOIN photos AS C ON C.member_id = A.sender_member_id
    	WHERE A.member_id='$pseudo_id'
    	AND A.comment_active=1
    	ORDER BY A.comment_id DESC LIMIT 0,5";

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    S'il y a plusieurs photos par membre, laquelle faut-il retenir ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Uniquement la 1ère trouvée dans le listing

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut faire une sous-requete alors, pas une jointure.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Oui mais donc il me faut faire autant de sous requetes à chaque fois que je veux afficher 20 commentaires par exemple ? Ca ne risques pas de charger le serveur inutilement ?

    Je pensais qu'il était possible de sortir que la 1ere photo ...

    Problématique tout ca ...

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Peut etre un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM comments AS A 
    	INNER JOIN members AS B ON A.sender_member_id = B.member_id
    	JOIN (
                       SELECT member_id, champ_photo FROM photos GROUP BY member_id
                 ) C ON C.member_id = A.sender_member_id
    	WHERE A.member_id='$pseudo_id'
    	AND A.comment_active=1
    	ORDER BY A.comment_id DESC
    Une solution serait que la photo devant être affiché soit identifiée ; ca serait en tout cas surtout plus simple a écrire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Points : 64
    Points
    64
    Par défaut
    Désolé pour le temps à avoir répondu mais j'étais un peu occupé.

    J'ai repris le problème à l'envers en fait car la photo en effet est identifiée mais elle peut être désactivée. En fait la base de données d'origine est un peu complexe à assimiler aussi ...

    La requete finale dont je me sert est celle ci du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $query = "
    SELECT A.comment_desc,A.creation_dt,B.member_login,C.photo_active,C.photo_filename FROM comments AS A
    INNER JOIN (SELECT * FROM members WHERE member_active=1) AS B ON A.sender_member_id=B.member_id
    LEFT JOIN (SELECT photo_active,member_id,photo_filename FROM photos WHERE prefered=1) AS C ON A.sender_member_id=C.member_id
    WHERE A.member_id='$pseudo_id'
    AND A.comment_active = 1
    AND A.receiver_del = 0
    ORDER BY comment_id DESC
    LIMIT 0,5
    ";
    Merci de ton aide 'sabotage' !

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

Discussions similaires

  1. soucis avec des requetes "INNER JOIN" Imbriquées
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 13/11/2008, 12h12
  2. Requete INNER JOIN pb
    Par petchos dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/07/2007, 10h11
  3. problème requete inner join
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/04/2007, 12h48
  4. [MySQL]simple requete INNER JOIN
    Par jpeg1st dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/12/2006, 14h04
  5. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09

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