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 :

Comment ordonner AVANT de grouper en MySql


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Comment ordonner AVANT de grouper en MySql
    Bonjour !

    J'ai un sérieux problème concernant une requète MySql... et parcour les forums dédiés a mysql sans trouver de réponses, je tente donc ma chance ici !

    En simplifiant, j'ai une base de donnée MySql avec plusieurs tables, dont une table comment (pour la gestion des commentaires) et une table actu ( pour la gestion des actus). Une actu peut avoir un ou plusieurs commentaires, et un commentaire est déstiné à une seule actu.

    J'aimerais effectuer une requète qui me selectionne les actus ayant recu au moins un commentaire, et trier ses actus en fonction de la date du commentaire le plus récent correspondant...

    Si j'effectue ma requete en l'ordonnant par date, j'obtient en résultat, tous les commentaires...trier dans le bon ordre ( du plus ancien au plus récent)
    Pour restreindre le résultat, je groupe ces commentaires en fonction de l'identifiant de l'actu...

    Et c'est la que le gros problème apparait, en fait, les résultat sont groupés avant d'être ordonés... du coup, ce n'est plus le dernier commentaire qui est pris en compte pour trier tout cela...

    Comment faire?

    Voici ma requete qui me restitue tous les actus ayant eu un commentaires, truées de la plus ancienne a la plus récente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT c.`id_comment`, c.`dateEn_comment`, c.`dateFr_comment`, c.`titre_comment`, c.`texte_comment`, a.`titre_actu`,a.`id_actu`, c.`pseudo_comment`,c.`mail_comment`,a.`slp_actu`
    FROM `comment` c, `actu` a
    WHERE c.`id_actu`=a.`id_actu` and c.`etat_comment`='ok'
    ORDER BY c.`dateEn_comment` desc"

    Voici l'autre requete, triant, apres avoir groupé, et ne me donnant donc pas le résultat attendu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT c.`id_comment`, c.`dateEn_comment`, c.`dateFr_comment`, c.`titre_comment`, c.`texte_comment`, a.`titre_actu`,a.`id_actu`, c.`pseudo_comment`,c.`mail_comment`,a.`slp_actu`
    FROM `comment` c, `actu` a
    WHERE c.`id_actu`=a.`id_actu` and c.`etat_comment`='ok'
    GROUP BY a.`id_actu`
    ORDER BY c.`dateEn_comment` desc"
    Merci énormément à celui ou celle qui pourra me répondre... je n'y arrive vraiment pas

    Lorent

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    C'est un problème récurrent :
    http://www.developpez.net/forums/sho...d.php?t=175289 (par ex)

    Pour faire court, c'est délicat. Group by groupe sur un ensemble de champs. Le select ne peut réellement retourner qu'eux, ou des MAX, MIN et autres sur les autres champs. Sinon, la ligne dont est tirée la valeur est indéterminée, ORDER BY ou pas (on sait juste qu'elle appartient au groupe, donc si tous les éléments du groupe ont la même valeur pour ce champ c'est bon, sinon c'est le loto).

    S'il faut avoir le commentaire le plus récent pour chaque groupe c'est l'horreur et généralement assez lent. Il faut passez par des requêtes imbriquées ou des jointures tordues.
    Si c'est juste pour trier l'idéal est dans le genre "ORDER BY MAX(dateEn_comment)". Avec un mysql récent c'est bien. Sinon le thread cité devrait t'aider mais c'est moins joli. A la limite modifier les actualités pour qu'elles conservent la date la plus récente serait plus simple que cette dernière solution (facile à tenir à jour et le tri devient trivial).

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

Discussions similaires

  1. comment formater un champs dans table mysql
    Par rollly dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/04/2006, 14h31
  2. Comment faire une analyse croisée sous MySQL ?
    Par jcachico dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/12/2005, 18h32
  3. Comment ajouter le support natif de mysql ?
    Par brennion dans le forum MFC
    Réponses: 2
    Dernier message: 22/03/2005, 21h40
  4. Comment change l'utilisateur root de mysql?
    Par silvermoon dans le forum Installation
    Réponses: 3
    Dernier message: 29/10/2003, 11h25

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