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 :

afficher le numero de la ligne dans une colonne


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut afficher le numero de la ligne dans une colonne
    Bonjour j'ai une requete qui me renvoie le nombre de facture d'un client, je voudrais pouvoir ajouter une colonne pour savoir quelle rang elle a (1er, 2nd) y'a t-il un équivalent à row_number() en mysql v5 ?
    merci
    voici ma requete : qui donne
    1-0
    1-0
    1-0

    et je voudrais

    1-0-1
    1-0-2
    1-0-3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*) AS nbCmd, numProfil as profil
     
    FROM facture 
    			GROUP BY numFacture,profil
    order by profil
    Une idée ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par maysa Voir le message
    y'a t-il un équivalent à row_number() en mysql v5 ?
    Je suppose que tu veux parler du ROWNUM d'Oracle ? non, il n'y a pas d'équivalent.

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Ca doit être possible d'utiliser des ruses complexes pour avoir cette information, en joignant la table sur elle-même. De cette manière, j'avais réussi à calculer des pourcentages cumulés dans une colonne. Mais si tu as un autre moyen d'obtenir cette information ou si tu peux t'en passer, je te suggère très fortement de l'employer.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci

    j'ai tenté ceci mais ça ne marche pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select 
    	F1.numFacture as numFacture,
    	F1.numProfil as numProfil,
    	count(F2.numProfil) as numOrdre
     
    from facture F1 inner join facture F2 on F1.numProfil = F2.numProfil
    Group by numProfil,numFacture 
     
     
    order by F1.numProfil

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    L'astuce consiste à utiliser une inégalité dans l'auto-jointure, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... ON F1.numProfil <= F2.numProfil
    Mais le problème est que les ex-aequo auront nécessairement le même rang.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Toutes les factures ont un numéro unique..je teste.. merci

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Bon ça ne marche pas, ça affiche toujours le meme numéro pour l'ordre...

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Ton numéro unique est-il le numProfil, ou une autre colonne ?

  9. #9
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Je pense aussi qu'il faut utiliser une inégalité, si tout va bien tu n'auras pas d'ex-aequo si tu as un index unique (client, facture) ou (facture).

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    bonjour,

    Le numFacture est unique. Le numProfil aussi mais pour ma requete j'ai

    numProfil [ numFacture | numOdre
    123----------124---------1
    123-----------245--------2
    123-----------269--------3
    124------------25--------1
    124------------135-------2


    mais je n'arrive pas à avoir cette fichue colonne numOrdre...

    la requete me donne un numéro totalement incompréhensible style 3652653. De plus, la requete mets bien 5 minutes à s'exécuter....

    Merci

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Il doit y avoir un problème au niveau de ta requête.
    Peux-tu nous donner la requête que tu utilises pour qu'on puisse y jetter un coup d’œil ?

    En principe, pour obtenir le numéro d'ordre des résultats d'une requête, on se base sur un champ unique, et pour chaque résultat, on compte le nombre de valeurs inférieures ou égales.

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    D'après tes données, le numProfil n'est pas unique sur la table facture. Si le numFacture l'est, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    	F1.numFacture AS numFacture,
    	F1.numProfil AS numProfil,
    	count(F2.numProfil) AS numOrdre
    	
    FROM facture F1 
      INNER JOIN facture F2 ON (F1.numProfil, F1.numFacture) >= (F2.numProfil, F2.numFacture)
    GROUP BY F1.numProfil, F1.numFacture
    ORDER BY F1.numProfil, F1.numFacture

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Merci beaucoup Antoun !

    Je ne savais pas qu'on pouvait faire on jointure avec deux champs dans le on.
    Je suis en vacances mais je teste cela dès que je le peux...
    je te remercie beaucoup et joyeux noel !

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 737
    Points
    11 737
    Par défaut
    Tu peux mettre toutes les conditions que tu veux dans un ON, car c'est l'équivalent d'un WHERE. Quant à l'écriture que j'ai utilisée, c'est un ROW CONSTRUCTOR (cf par exemple la doc 5.1 chapitre 13.2.8.5).

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    merci j'ai vais voir ça de suite.
    Par contre la requete est très longue à s'exécuter...
    a plus
    et joyeux noel !

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

Discussions similaires

  1. Afficher un nombre fixe de lignes dans une ListView
    Par poutch dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 12/08/2011, 08h14
  2. numero(index) de ligne dans une grille xaml
    Par Rock01 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 17/02/2011, 21h39
  3. générer le numero de la ligne dans une vue
    Par Sniper37 dans le forum Développement
    Réponses: 5
    Dernier message: 21/01/2010, 09h46
  4. Nombre de lignes <> '' dans une colonne Excel
    Par zemeilleurofgreg dans le forum Delphi
    Réponses: 5
    Dernier message: 10/07/2007, 15h22
  5. Réponses: 4
    Dernier message: 02/06/2007, 12h35

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