Partage
  • Partager sur Facebook
  • Partager sur Twitter

Joindre le dernier enregistrement dans une jointure

    30 août 2010 à 12:36:34

    Bonjour !

    Je suis en train de développer un système de news en php avec enregistrement des modifs.
    En gros, j'ai une table sql qui stoque la news (table news), avec son identifiant et toutes ses infos, et une autre table qui enregistre toutes les modifications apportées à la news avec un id de modification et l'id de la news (table modification_news)

    J'ai donc plusieurs fois l'id de la news présent dans la table de modifs.

    Actuellement, pour sélectionner toutes infos qu'il me faut sur la news (infos de la news de la table + infos de la table modification_news concernant la news (uniquement l'enregistrement le plus récent)), je fait 2 requêtes.

    J'ai essayé plusieurs fois de faire une jointure, mais je n'y arrive pas, étant donné que l'id de la news n'est pas forcément présent dans la table de modification_news, ou qu'il l'est plusieurs fois.
    J'ai un champs enregistrant le timestamp dans la table modification_news, et je voudrais donc faire une jointure sur l'identifiant de la news entre les 2 tables, qui joigne le dernier enregistrement de modification_news.

    Voila, je ne sais pas si j'ai été assez clair, et si vous voulez des précisions, n'hésitez pas.

    Si vous pouvez m'aider sur cette requête, je vous en serez reconnaissant.

    Merci d'avance, Land3r
    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2010 à 14:23:21

      bonjour, il faut effectivement une jointure entre les 2 tables (sur l'id) et puis ajouter dans le where une condition sur le timestamp qui sera sélectionné en fonction du dernier timestamp. Donc avec une requête imbriquée ou corrélée.

      Exemple avec des tables similaires (articles et commentaires) à adapter.
      Je suppose que c'est sur la date de la modif que l'on doit affecter un critère de sélection ainsi que sur une news.


      SELECT * FROM articles a, commentaires c
      WHERE a.id_article = c.id_article
      AND a.id_article = 2
      AND c.date_commentaire =
      (SELECT max(date_commentaire) FROM commentaires WHERE id_article = a.id_article);
      


      ou bien sans jointure si on ne veut que des informations sur la table modification_news (commentaires dans mon exemple) :

      SELECT * FROM commentaires c
      WHERE id_article = 1 AND date_commentaire =
      (SELECT max(date_commentaire) FROM commentaires WHERE id_article = c.id_article);
      
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2010 à 11:23:26

        Merci, ça marche niquel :D

        Je crois que je vais m'intéresser un peu plus aux requêtes imbriquées, ça a l'air sacrement puissant !
        • Partager sur Facebook
        • Partager sur Twitter

        Joindre le dernier enregistrement dans une jointure

        × 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