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 :

GROUP BY et ORDER BY - Impossible de trier correctement


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut GROUP BY et ORDER BY - Impossible de trier correctement
    Bonjour,

    J'utilise MySQL 5.1.37

    Je vais m'expliquer au mieux, j'ai 2 tables dans ma bdd:

    [users]

    user_id , username
    1 , pseudo1
    2 , pseudo2
    3 , pseudo3
    4 , pseudo4
    5 , pseudo5

    et

    [pictures]

    picture_id , picture_createtime , picture_path , user_id
    1 , 1200000005 , ./chemin1 , 1
    2 , 1200000002 , ./chemin2 , 1
    3 , 1200000004 , ./chemin3 , 2
    4 , 1200000001 , ./chemin4 , 3
    5 , 1200000003 , ./chemin5 , 2
    ------------------------------------

    Je souhaite extraire les 3 derniers enregistrement de la table "pictures" sans doublons "user_id" et trié par "picture_createtime DESC". Voici donc le résultat que je souhaite:

    1 , 1200000005 , ./chemin1 , 1
    3 , 1200000004 , ./chemin3 , 2
    4 , 1200000001 , ./chemin4 , 3

    Pour ca, j'essaye la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.user_id, u.username, p.picture_path
        FROM pictures p, users u
        WHERE u.user_active = 1
            GROUP BY p.user_id
                ORDER BY p.picture_createtime DESC
    Le GROUP BY fonctionne bien, mais pas le ORDER BY, il ne trie pas comme je le veux...

    J'ai également essayé avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u.user_id, u.username, p.picture_path, MAX(p.picture_createtime) AS orderbytime
        FROM pictures p, users u
        WHERE u.user_active = 1
            GROUP BY p.user_id
                ORDER BY orderbytime DESC
    Mais ca ne va pas non plus

    Si quelqu'un a une idée de comment résoudre ce problème, je suis preneur

    grand merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Essaie la requête suivante (sans garantie, je n'ai pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u.user_id, u.username, p1.picture_path, p1.picture_createtime AS orderbytime
    FROM users u
    INNER JOIN pictures p1 ON u.user_id = p1.user_id
    INNER JOIN pictures p2 ON p1.user_id = p2.user_id
    WHERE u.user_active = 1
    GROUP BY u.user_id, u.username, p1.picture_path, p1.picture_createtime
    HAVING p1.picture_createtime = MAX(p2.picture_createtime)
    ORDER BY orderbytime DESC LIMIT 3
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 129
    Points : 159
    Points
    159
    Par défaut
    Le problème avec ta requête, c'est la jointure ... sans condition de jointure !

    Si tu la réécris comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT u.user_id, u.username, p.picture_path
    FROM pictures p
    INNER JOIN users u
    USING (user_id)
    WHERE u.user_active = 1
    GROUP BY p.user_id
    ORDER BY p.picture_createtime DESC
    Je pense que ça devrait mieux marcher !

    Stéphane

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

    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    grand merci StephaneC.

    ca marche à merveille!

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

Discussions similaires

  1. ADO : impossible de trier les champs
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 07/11/2007, 22h53
  2. Pb : impossible de trier sur le datagrid
    Par FamiDoo dans le forum ASP.NET
    Réponses: 17
    Dernier message: 28/08/2007, 15h16
  3. [SQL] group by et order by dans la même requête ?
    Par thomfort dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/08/2007, 22h31
  4. Distinct, group by et order by
    Par gloubi dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/11/2006, 16h53
  5. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28

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