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 :

Requêtes, groupes et ordonnancement


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut Requêtes, groupes et ordonnancement
    Bonjour,

    J'ai une requête qui me renvoit un résultat à partir de 4 tables. Ce résultat se présente sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ID     LABEL     ENTIER1     ENTIER2
    1     libelle         1               0
    1     unautre         0               1
    2     encore          1               0
    2     toujours        0               1
    3     bonjour         1               0
    3     zorro           0               1
    etc.
    Je traite les résultats en me basant sur l'ID, et j'ai besoin d'avoir ces résultats groupés sur l'identifiant, ce que je fais dans la requête en utilisant un "GROUP BY".

    J'aimerais savoir s'il existe une solution me permettant de trier les résultats sur la colonne LABEL en fonction de la valeur d'une autre colonne, tout en conservant les groupements par ID. Concrètement j'aimerais un résultat qui me trie sur LABEL en fonction d'une valeur dans la colonne ENTIER1 et qui conserverait les groupements de lignes par ID!

    En me basant sur l'exemple précédent, si je considère que mon résultat doit être trié sur la LABEL quand ENTIER1 a la valeur de 1, j'aimerais obtenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ID     LABEL     ENTIER1     ENTIER2
    3     bonjour         1               0
    3     zorro           0               1
    2     encore          1               0
    2     toujours        0               1
    1     libelle         1               0
    1     unautre         0               1
    etc.
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Pourriez-vous nous présenter une ébauche de la requête que vous tentez de mettre au point.
    Cela sera plus facile pour vous aider à la faire évoluer.
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

    En se limitant à ce que vous présentez, il suffirait d'une clause ORDER BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY id DESC, label
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Merci pour votre réponse, et le SGBD est MySql 5

    Je tente d'expliquer mon problème de façon simplifiée pour éviter les complications inutiles - c'est déjà pas facile à expliquer...

    Votre solution ne marche pas car elle ne prend pas en compte la colonne ENTIER1 d'une part et que d'autre part elle trie d'abord sur "ID desc". Je cherche un trie alphabétique sur la colonne LABEL en fonction de la valeur de la colonne ENTIER1 tout en conservant les groupements par ID.

    Je sais très bien que çà ne marche pas, mais comme c'est intuitivement ce que j'aurais envi de coder, je montre un exemple de fin de requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ORDER BY LABEL WHERE ENTIER1 = 1
    GROUP BY ID

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    L'utilisation que vous faites de GROUP BY, bien qu'autorisée par MySQL, n'est en rien conforme à sa définition normalisée.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    je ne connais pas les spécificités de MySql 5, néanmoins, cela peut vous donner des idées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM ma_table
    ORDER BY (SELECT m2.LABEL FROM ma_table as m2 WHERE m2.ENTIER1 = 1 AND ma_table.ID=m2.ID), (CASE ENTIER1 WHEN 1 THEN NULL ELSE LABEL END) nulls first
    Je penche, donc je suis

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 89
    Points : 64
    Points
    64
    Par défaut
    Merci chrifo, je sens qu'il y a de l'idée dans ta suggestion, mais je n'arrive pas à l'appliquer à mon cas qui est plus complexe que celui décrit. Comme j'atteins là mes limites en SQL, je crois que je vais plutôt m'orienter vers un tri en PHP, ca m'évitera un mal de crâne trop important!

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/09/2006, 12h35
  2. [Req] Explication sur requête Group By
    Par benazerty dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/09/2006, 17h52
  3. Réponses: 3
    Dernier message: 16/08/2006, 16h05
  4. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 13h16
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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