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

Langage SQL Discussion :

[MySQL, PostGreSQL] Récupérer les max sur une jointure


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut [MySQL, PostGreSQL] Récupérer les max sur une jointure
    Bonjour, j'ai deux tables : forums et posts qui servent pour un forum.
    La table forum contient un champ f_id.
    La table posts contient un champ f_id, p_id et p_time.
    Tous ces champs sont des INT.

    Mon but est de récupérer la liste des forums, ainsi que le dernier message pour chaque forum, dans une jointure. Malheuresement je bloque, il me récupère à chaque fois le premier, j'ai pourtant essayer plusieurs requètes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT f_id, p_id
    FROM fsb2_posts
    GROUP BY f_id
    ORDER BY MAX( p_time ) DESC
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT f.f_id, p.p_id
    FROM fsb2_forums f
    LEFT JOIN fsb2_posts p ON p.f_id = f.f_id
    GROUP BY f.f_id
    ORDER BY p.p_time DESC
    Sans succès :/

    A noter que la requète doit marcher sous plusieurs bases de données (MySQL, PostGreSQL)

    Merci d'avance, la solution est surement évidente.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    C'est parce qu'il te faut t'y prendre autrement

    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT f.f_id, p.p_id
    FROM fsb2_forums f
    LEFT JOIN fsb2_posts p ON p.f_id = f.f_id
    WHERE p_time = (
       SELECT MAX(p2.p_time)
       FROM fsb2_posts p2
       WHERE p2.f_id = f.f_id
    )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Merci, ça marche nickel ! J'ai compris le principe maintenant.
    @+
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Correction
    Bonjour
    le code proposé n'est pas complétement juste.
    Il donne le même résultat avec ou sans le left.
    Pour le faire fonctionner avec le left, il faut remplacer le 1er where par and.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT f.f_id, p.p_id
    FROM fsb2_forums f
    LEFT JOIN fsb2_posts p ON p.f_id = f.f_id
    AND p_time = (
       SELECT MAX(p2.p_time)
       FROM fsb2_posts p2
       WHERE p2.f_id = f.f_id
    )
    Même 10 ans après il me semble que cette précision est importante.

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

Discussions similaires

  1. Bugs sur les Dates sur une base de données MySQL
    Par sheepo dans le forum MySQL
    Réponses: 8
    Dernier message: 19/05/2015, 18h21
  2. Réponses: 2
    Dernier message: 15/02/2014, 22h14
  3. Regrouper les champs sur une jointure multiple
    Par Grégory PLANCHAT dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/09/2007, 12h16
  4. retrouver les contraintes sur une colonne
    Par kalari dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2005, 17h03
  5. [reseaux] Lister les processus sur une machine donnée
    Par BEAUJAULT dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 29/07/2004, 15h55

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