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

Requêtes MySQL Discussion :

ORDER BY, MAX() dans une jointure MySQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut ORDER BY, MAX() dans une jointure MySQL
    Bonsoir,

    Je vous expose mon problème en espérant avoir de l'aide,
    j'ai une requête qui affiche mon forum comme suite :
    nombre de sujet,
    titre du dernier sujet,
    auteur du dernier sujet et date du dernier sujet de chaque forum, le souci que je rencontre, c'est que je n'arrive pas a afficher le titre ,la date et l'auteur du dernier sujet j'ai beau mettre MAX() dans la colonne DateSujet mai rien y fait pourtant j'ai lu des article, des poste, et des exemple a ce sujet mai vraiment je n'y arrive pas,
    sa fait 1 semaine que je bloque, alors maintenant je fait appel a vous en espérant que vous pourriez m'aider merci d'avance

    Voici ma requête en question :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT IdForum ,IdSujet, NomCategorie,Rang,IdCategorie,NomForum ,IcFor,COUNT(IdSujet) AS NbSujet, TitreSujet, PseudoMembre ,IdMembre ,date_format(MAX(DateSujet),"%d/%m/%Y a %H:%i") AS dateFR
    FROM                                                                                                                  
        Categorie
            LEFT JOIN Forum  ON IdCategorie=IdForCat
            LEFT JOIN Sujet  ON IdSujFor=IdForum
            LEFT JOIN Membre ON AuteurSujet=IdMembre
    GROUP BY 
        IdForum ');

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Par défaut
    Et quel est le résultat de cette requête ?

    Si tu veux les infos pour la date la plus récente, alors c'est dans la clause WHERE qu'il faut mettre max(date)...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    salut farid cette requête retourne le titre du sujet le plus ancien avec les date et auteur qui ne correspondent pas,
    j'ai fait ce que tu m a dis pour le max dans le where sa ne change rien j'ai toujours le même souci ; (

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    pour trier les enregistrements en fonction du sujet le plus récent c'est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY DateSujet DESC
    à condition que DateSujet soit de type date,datetime,timestamp.

    quand on on effectue un groupement de lignes, les colonnes figurant dans le SELECT(exceptées les fonction d'agrégation) doivent apparaître dans le GROUP BY.S'il y a des colonnes qui ne sont pas concernées par le regroupement tu peux les inclure dans group_concact(col2,col3,'separateur'):
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql="
    SELECT IdForum ,COUNT(IdSujet) AS NbSujet ,
    GROUP_CONCAT(IdSujet, NomCategorie,Rang,IdCategorie,NomForum ,IcFor, TitreSujet, PseudoMembre ,IdMembre ,
                            date_format(DateSujet,'%d/%m/%Y a %H:%i') ,'#') AS lignes_groupees
      FROM                                                                                                                  
      Categorie
      LEFT JOIN Forum  ON IdCategorie=IdForCat
      LEFT JOIN Sujet  ON IdSujFor=IdForum
      LEFT JOIN Membre ON AuteurSujet=IdMembre
      GROUP BY IdForum ORDER BY DateSujet DESC;
    ";

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    Merci armel18 pour ta réponse mais rien ne marche chez moi j'ai tout essayer de plus des que je met "…ORDER BY DateSujet DESC"
    sa me suprime des forum pour m'en laisser qu'un seul de chaque catégorie,
    je sais pas dutout quoi modifier dans ma requête pour avoir ce que je veux même les MAX(…) ne change rien alors que dans de nombreux poste c'est ce qu'il utilise

    PS: oui DateSujet est de type datetime

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Par défaut
    Peux-tu nous montrer ton schéma de base de données ?
    Juste les tables qui interviennent dans la requête.
    Merci.

    Edit: Effectivement, je viens de me rendre compte que j'ai dit une boulette, un max dans la clause where, forcément ça marche pas. Il faut plutôt faire une sous-requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE date = (SELECT max(date) FROM ...)

Discussions similaires

  1. [MySQL, PostGreSQL] Récupérer les max sur une jointure
    Par genova dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/12/2017, 15h25
  2. Utiliser MAX dans une jointure
    Par gotcha5832 dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/07/2014, 01h00
  3. [MySQL] Chercher le contenu d'un tableau dans une table MySQL et jointure
    Par javagirl08 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 19/08/2009, 13h40
  4. trouver une un MAX dans une jointure
    Par cmako dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/02/2009, 20h34
  5. Réponses: 6
    Dernier message: 23/01/2007, 10h17

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