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 :

Problème de formulation de requète


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut Problème de formulation de requète
    Bonjour à tous,

    J'ai un petit problème avec une requète SQL :
    J'ai deux tables :
    • topics :
    • posts :


    Initialement, je me contentais de sortir de la table topics tous les messages qui y avaient été postés par ordre décroissant de date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM topics 
    ORDER BY date_pub DESC
    Mais je souhaiterais sortir désormais de la table topics les messages par ordre du dernier post posté dans la table posts (on connait la correspondance entre un post et le topic par le biais de la clef fk_article):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT top.*, 
      MAX(pos.date_pub) AS date_com, 
      pos.fk_article AS fk_article 
    FROM topics AS top, posts AS pos 
    WHERE (top.id_article = fk_article) 
    GROUP BY fk_article 
    ORDER BY date_com DESC
    Le problème : cette requette fonctionne, mais ne renvoie que les topics qui ont eu au moins un commentaire. J'ai l'ai contourné inélégamment dans un premier temps en postant un post vierge (masqué à l'affichage) à la création de chaque nouveau topic, mais il doit y avoir une solution pour :
    • afficher les topics par ordre de date du dernier message posté lié
    • afficher le reste des topics par ordre de date décroissante


    Non ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il suffit de faire une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT
        tp.id_article,
        tp.titre,
        tp.auteur,
        tp.date_pub,
        tp.texte,
        max(pt.date_pub) AS date_com
    FROM
        topics AS tp
        LEFT OUTER JOIN posts AS pt
          ON pt.fk_article = tp.id_article
    GROUP BY
        tp.id_article,
        tp.titre,
        tp.auteur,
        tp.date_pub,
        tp.texte
    ORDER BY
        date_com DESC,
        tp.date_pub DESC

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Merci c'est bien mieux comme ça !

    Je connaissais pas les jointures je vais me renseigner là dessus.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ORDER BY
        date_com DESC,
        tp.date_pub DESC
    Cependant, la requète liste premierement les topics dans lesquels il y a des posts, par date du post puis ensuite ceux où il n'y a pas de posts, par date de création du topic. Ne pourrait on pas rendre le résultat mélangé par ordre décroissant de date en général ?

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut savoir ce que vous voulez !
    Je vous rappelle votre première demande :
    • afficher les topics par ordre de date du dernier message posté lié
    • afficher le reste des topics par ordre de date décroissante


    Néanmoins, regardez du côté de la fonction COALESCE, et cherchez un peu

Discussions similaires

  1. Problème de formulation de requête
    Par trealais dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/01/2011, 17h27
  2. Problème à la formulation d'une requête
    Par Shiva dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/09/2010, 11h43
  3. [SQL] Problème pour formuler une requête SQL
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/03/2008, 19h35
  4. problème de formulation d'une requête
    Par seiryujay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/08/2004, 18h13
  5. Problème de formulation de requète
    Par tellitocci dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2004, 06h05

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