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 :

Jointure tri et regroupement


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Jointure tri et regroupement
    Bonjour,
    je tourne autour d'un problème certainement simple, mais je pense que j'ai du mal à le cerner et donc à trouver la solution.

    J'ai deux tables:
    - facture (numero,echeance,auteur)
    - facturedetail (num_facture,date,montant, observation, num_affaire)

    Une facture peut avoir une ou plusieurs lignes de détails, le numéro de facture étant évidemment unique.

    Pour récupérer mes factures, je fais une jointure sur la table facturedetail et je les tri par numéro de facture pour que toutes les lignes de détails soient regroupées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT numero,date,echeance,auteur,montant,observation FROM facture
    LEFT JOIN facturedetail ON facturedetail.num_affaire=facture.numero
    ORDER BY numero
    Jusqu'ici tout va bien, mais si je veux trier mes factures par date, tout en gardant mes lignes de détails regroupées, je fais comment?
    Il y a bien une notion de parents enfants mais je sèche.

  2. #2
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Salut !

    Je suis pas sur d'avoir saisi ton besoin, mais on peut trier des résultats sur plus d'une colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT numero,date,echeance,auteur,montant,observation FROM facture
    LEFT JOIN facturedetail ON facturedetail.num_affaire=facture.numero
    ORDER BY numero, date
    Avec cette requête tu auras les résultats triés selon le numéro (d'abord) et selon la date (après).

    Aussi tu parles de regroupement dans ton post, mais je pense que tu voulais juste parler de tri (ORDER BY) et non pas de regroupement (GROUP BY), non ??
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Oui c'est bien d'un tri dont on parle, pas d'un group by.
    Le tri par plusieurs colonnes ne donne pas le résultat que j'attends.
    J'illustre ce que je souhaite obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    date           numero      montant
    01/01/11     2               25
    01/01/11     2               36
    02/01/11     1               26
    02/01/11     1               54
    02/01/11     1               65
    03/01/11     3               68
    En espérant être plus clair.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    et vous voullez quoi comme résultat en fait ?
    donnez un jeu de sortie

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    J'ai cité dans mon post précédent le résultat que je souhaite obtenir.
    C'est comme si je voulais afficher les posts de plusieurs sujets de discussion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sujet 1
     post1
     post2
     post3
    Sujet 2
     post1
     post2
     post3
    Et je cherche à trier mes sujets selon différents critère (date,auteur,nombre de posts)

    Il y a bien la représentation intervallaire, mais pour un seul sous niveau je trouve que c'est lourd.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    On part de facture et on atteri sur des sujets...

    Dans votre exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    01/01/11     2               25
    01/01/11     2               36
    Comment savoir laquelle des deux lignes place-t-on en 1er ?

    Ensuite je ne comprend pas bien votre jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT numero,date,echeance,auteur,montant,observation FROM facture
    LEFT JOIN facturedetail ON facturedetail.num_affaire=facture.numero
    ORDER BY numero
    Au vu de vos tables :
    - facture (numero,date,echeance,auteur)
    - facturedetail (num_facture,montant, observation, num_affaire)
    Que représente num_facture et num_affaire dans la table facturedetail ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    J'ai utilisé l'exemple des sujets car il me semblait plus compréhensible pour tout le monde et correspond à mon attente.
    Dans mon exemple, l'ordre dans lequel s'affichent chaque lignes de détail d'une même facture a peu d'importance. Par contre, toutes les lignes de détail d'une même facture doivent s'afficher ensemble.

    Dans la table facturedetail, le champs num_facture est le numéro de facture auquel appartient la ligne de détail. num_affaire est une autre information propre à la ligne de détail, comme le montant.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ok,

    donc vous avez un problème dans votre jointure initiale.

    Ceci étant dit, le langage SQL n'est pas fait pour gérer de la cosmétique et c'est ce que vous voullez faire. (si j'ai bien compri le besoin)

    Une restitution de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    colonnes liées en-tête facture
       colonnes liées détail facture
    Est imposssible à avoir, car ce ne sont pas les même colonnes que vous ramenez.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bien évidemment, je ne cherche pas à créer mon indentation via SQL, elle n'est ici que pour illustrer le résultat final que je souhaite obtenir.
    Je ne cherche pas non plus à ramener des colonnes différentes.

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    beh, dans ce cas en quoi la requête de Gyzmoo ne marche pas ...?

    Vous dites vouloir trier votre résutlat sur le numéro de facture ainsi que la date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    order by numero, date
    Répond à ce souhait.

    donc ?

  11. #11
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    J'ai du raté qq chose, car je ne comprends pas pourquoi cette requête ne pourrait pas faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT numero,date,echeance,auteur,montant,observation 
    FROM facture
    LEFT JOIN facturedetail ON facturedetail.num_facture=facture.numero
    ORDER BY numero, date
    ??

    [Edit]Grillé par Punkoff[/Edit]
    [Edit2] Ok j'avais pas saisi le besoin... [/Edit2]
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Parce que cette requête me donne le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    numero  date               
    1          01/01/10                 
    1          02/01/10
    1          03/01/11
    2          01/01/09
    2          02/01/12
    3          01/01/08
    4          01/01/11
    4          02/01/11
    Alors que je veux ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    numero  date               
    3          01/01/08
    2          01/01/09                 
    2          02/01/12
    1          01/01/10
    1          02/01/10
    1          03/01/11
    4          01/01/11
    4          02/01/11

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    euh,


    Dans la description de table que vous nous avez donnez, la date n'est présente que sur l'en-tête de facture.

    Votre résultat implique qu'il y ai une date sur le détail de facture aussi.

    Vous nous faites une présentation correct de l'existant ?


    edit: ou alors y aurai-t-il autant d'en-tête de facture que de ligne dans la table facture ?

  14. #14
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; c'est simple il suffit de faire : ORDER BY date,numero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT numero,date,echeance,auteur,montant,observation 
    FROM facture
    LEFT JOIN facturedetail ON facturedetail.num_facture=facture.numero
    ORDER BY date,numero

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Autant pour moi, la colonne date fait bien partie de la table facturedetail, j'ai modifié mon premier post, désolé de vous avoir induis en erreur.

  16. #16
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re: avoir cette structure en sql
    Sujet 1
    post1
    post2
    post3
    Sujet 2
    post1
    post2
    post3
    sa m'interesse ; j'aimerai bien avoir une piste !!!

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Citation Envoyé par loicbjrd Voir le message
    Autant pour moi, la colonne date fait bien partie de la table facturedetail, j'ai modifié mon premier post, désolé de vous avoir induis en erreur.
    Y a-t-il une date présente sur l'en-tête de commande ? ca faciliterai grandement la chose

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Je suis bien d'accord avec toi.
    Je ne suis pas à l'origine de la structure de la base qui a été conçue de manière empirique, aussi je préfèrerais me débrouiller sans la modifier.
    Et si je mets tout dans une seule table, avec un champ 'parent'?

  19. #19
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    faut respecter modèle E/A sinon beaucoup de boulo

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    J'ai trouvé une piste très intéressante.

    http://nyrodev.info/fr/posts/172/MyS...-sous-requetes

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Jointures, tris et groupements
    Par azmeuk dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/02/2007, 16h10
  2. Requete Mysql + jointure + tri : arhfh!
    Par Amara dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/06/2006, 14h24
  3. Réponses: 8
    Dernier message: 13/01/2006, 11h35
  4. [Etat] Tri et regroupement
    Par acceso dans le forum IHM
    Réponses: 1
    Dernier message: 05/01/2006, 11h24
  5. [vbexcel]tri ou regroupement de ligne en fonction de valeur.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 18h22

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