Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL INNER JOIN

afficher une premiere ligne seulement

    11 janvier 2011 à 2:00:33

    Bonsoir,

    Je cherche à afficher mon forum en liste:
    sujet1 auteur1 11/01/11 9h00
    sujet2 auteur1 11/01/11 8h13
    sujet3 auteur2 12/01/11 6h54
    ...

    mais je coince sur le fait que sans AND fm.id = max(fm.id) les sujets s'affichent plusieurs fois (autant qu'il y a de message posté dans le sujet), et mettre AND fm.id = max(fm.id) ne fonctionne pas.

    <?php
    $reponse = $bdd->prepare('SELECT fs.id id, fs.sujet sujet, fs.date date, u1.id id1, u2.id id2, u2.pseudo pseudo, fm.contenu contenu
    	FROM forum_sujet fs
    	INNER JOIN utilisateur u1 ON u1.id = fs.id_auteur
    	INNER JOIN forum_messages fm ON fm.id_sujet = fs.id
    	INNER JOIN utilisateur u2 ON u2.id = fm.id_auteur	
    	WHERE fs.afficher != ? AND fm.id = max(fm.id)
    	ORDER BY fs.date DESC, fm.id DESC');
    ?>
    


    J'espère être assez clair :euh:

    Merci pour votre aide !

    EDIT pour répondre à Fayden:

    j'ai 3 tables:
    - forum_sujet (contenant 3 sujet)
    - forum messages (contenant 2 messages pur le sujet1, 3 messages pour le sujet2 et 6 messages pour le sujet3)
    - utilisateur (contenant 5 utilisateurs) (mais pas besoin d en parler ici)

    ma requete sans AND fm.id = max(fm.id) me revoie en liste

    sujet1 message1
    sujet1 message2
    sujet2 message3
    sujet2 message4
    sujet2 message5
    sujet3 message6
    sujet3 message7
    sujet3 message8
    sujet3 message9
    sujet3 message10
    sujet3 message11

    or moi je veux qu'elle me revoie la liste des sujets avec à cöté seulement le dernier message recu:

    sujet1 message2
    sujet2 message5
    sujet3 message11

    • Partager sur Facebook
    • Partager sur Twitter
      11 janvier 2011 à 2:42:46

      Donne la structure de tes tables, un jeu d'essai et le résultat désiré.
      • Partager sur Facebook
      • Partager sur Twitter
        11 janvier 2011 à 13:25:30

        bonjour,
        tu peux faire une requête corrélée du genre :
        SELECT titre, commentaire, date_commentaire
        FROM articles a, commentaires c
        WHERE a.id_article = c.id_article
        AND date_commentaire =
        (SELECT MAX(date_commentaire)
        FROM commentaires
        WHERE id_article = c.id_article
        );
        

        Ma structure est similaire. Je simplifie [articles(id_article, titre) et commentaires(id_comment,commentaire,date_commentaire, id_article)].
        Tu adaptes avec tes noms, tu la mets à la sauce ANSI (INNER JOIN ...).
        Le principe, je résume, c'est que dans la sous-requête tu vas sélectionner la date la plus récente du commentaire courant du SELECT principal.
        • Partager sur Facebook
        • Partager sur Twitter

        SQL INNER JOIN

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown