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 :

Requête SQL avec ORDER BY et GROUP BY [MySQL-5.5]


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 84
    Points : 48
    Points
    48
    Par défaut Requête SQL avec ORDER BY et GROUP BY
    Bonjour,

    J'ai besoin d'une petite aide (merci d'avance) sur une requête sql d'une messagerie, dont je ne trouve pas la solution.

    Est-ce que quelqu'un peut me dire comment rendre cette requête correcte :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste1=mysql_query("select * from `mp` where `ka`='".$_SESSION['mbid']."'  group by `kde` order by tamp desc ");

    Car j'aimerais que le group by prennent en compte la dernière ligne sql ?

    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,

    Mettre un GROUP BY avec un SELECT *, ça ne sert strictement à rien...
    Si vous nous disiez plutôt ce que vous souhaitez que fasse cette requête, avec un petit jeu de données en exemple...
    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 du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 84
    Points : 48
    Points
    48
    Par défaut
    Oui, alors je vais essayer d'être le plus clair possible, pas facile à expliquer.

    Alors j'ai une table sql avec ça comme ligne :

    ID - Id membre qui à envoyer le message - Id membre reçu le message - Contenu - Message lu ou non lu (1pour lu 0 pour non lu)

    1 - 54 - 88 - coucou - 1
    2 - 54 -88 - ca va ? - 1
    3 - 54 - 88 - Que fait tu ? - 0
    4 - 12 - 88 - coucou - 1
    5 - 12 -88 - ca va ? - 1
    6 - 12 - 88 - Que fait tu ? - 0

    Actuellement dans la liste des messages j'ai 6 lignes de résultats, un pour chaque message. Mais j'aimerais avoir que deux lignes, avec un group by (ou autre)
    En gros que cela affiche juste une ligne par id du membre qui à envoyer le message.

    Donc la pour l'id 54 à l'id 88 au lieux d'avoir 6 ligne, il faudrais juste deux lignes, une avec un group by de l'id 54, et une autre group by de l'id 12.
    Il faudrait que ce soit classé par ID et que cela affiche les infos du dernier message (donc le plus gros ID)

    Je sais pas si j'ai été clair ?

    Merci encore.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Visiblement vous avez évité les cours de SQL.
    Un GROUP BY sert à créer des sous-ensembles de données afin d'effectuer des opérations de calcul d'agrégat, par exemple MAX, MIN, AVG, SUM, COUT....

    Décrivez le résultat attendu de ce que vous voulez faire avec un exemple concret.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Points : 50
    Points
    50
    Par défaut
    t'inquiètes, en tant que cancre du sql, je te comprends :p
    les 2 provocateurs invétérés qui ont posté avant moi font semblant de ne rien comprendre, car selon la sacro-sainte séparation logique/physique, vouloir récupérer "le premier résultat d'un GROUP" n'a pas de sens (c'est un groupe, donc il n'y a pas de 1er élément, ce sont des éléments en vrac, patati patata .

    a mon avis il y a juste une chose qui t'échappe :
    l'ORDER BY est fait après le GROUP BY
    (donc pour faire ce que tu veux avec ces 2 clauses, il te faudrait une sous-requête qui fait le ORDER, et la requête principale qui fait le GROUP)
    je ne dit pas que c'est la meilleure façon de procéder, mais tu peux arriver à quelque chose de fonctionnel ainsi.
    par contre niveau perfs, va falloir te poser des questions : si tu fais une sous-requête qui récupère (et trie) tous les message d'un user, pour au final n'en récupérer que quelques uns...


    par contre, je suis qd même un peu d'accord avec ced et SQLpro : es-tu sûr d'avoir bien traduit (techniquement) ton besoin (fonctionnel)?
    ton exemple laisse penser que tu veux récupérer les messages non lus.
    si c'est le cas, utilises ta colonne "message_lu" et on en parle plus! (et mets un index sur "id_membre, message_lu")

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2014, 11h18
  2. [2008] Requête SQL avec GROUP BY
    Par thierry007 dans le forum Développement
    Réponses: 5
    Dernier message: 02/12/2013, 10h07
  3. Requête SQL avec Group By par semaine
    Par SOPSOU dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/07/2013, 22h20
  4. Réponses: 2
    Dernier message: 16/05/2012, 09h48
  5. Requête SQL avec UNION, sum et GROUP BY
    Par Guitariff dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2006, 13h48

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