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

MySQL Discussion :

GROUP_CONCAT qui renvoie une suite de caractères incohérente


Sujet :

MySQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 76
    Points : 210
    Points
    210
    Par défaut GROUP_CONCAT qui renvoie une suite de caractères incohérente
    Bonjour !

    Sur MySql ma requête ne renvois qu'une suite de caractère incohérent et c'est très embêtant car il me faut récupérer la concaténation de plusieurs variable de type varchar.
    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT LISTEPRELEVEMENT.CLE_LISTEPRELEVEMENT, LISTEPRELEVEMENT.DATE_PRELEVEMENT AS 'Date opération', 
    NOM_UTILISATEUR As Utilisateur, NUMPOSTE AS Poste, DATE_FICHIER as 'Date prélèvement', 
    SUM(MONTANT_PRELEVE_EURO) as Montant, CHEMIN_FICHIER as 'Chemin du fichier', 
    GROUP_CONCAT( LIGNE_PRELEVEMENT.MANDAT_ID )  AS 'MANDATS'  
    FROM LISTEPRELEVEMENT,LIGNE_PRELEVEMENT,UTILISATEUR 
    WHERE LISTEPRELEVEMENT.CLE_LISTEPRELEVEMENT=LIGNE_PRELEVEMENT.CLE_LISTEPRELEVEMENT 
    AND LISTEPRELEVEMENT.CLE_UTILISATEUR=UTILISATEUR.CLE_UTILISATEUR  
    AND DATE_FICHIER >='2014-07-13' 
    GROUP BY LISTEPRELEVEMENT.CLE_LISTEPRELEVEMENT
    ORDER BY DATE_FICHIER,LISTEPRELEVEMENT.DATE_PRELEVEMENT
    mon résultat pour la colonne MANDATS est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x4D44542D5052533034303437352D5243522D303030303030303239392C4D44542D5052533034333834382D5243522D303030303030303330302C4D44542D5052533032383330342D5243522D30303030303030333031
    ce qui ne correspond absolument pas au résultat attendu.
    J'ai bien vérifié les données sur les tables correspondantes et tout est ok

    C'est la première fois que j'utilise GROUP_CONCAT peut être que je m'y prend mal, mais j'ai suivi les exemples et explications trouvés sur le net...
    Si vous avez déjà été confronté à ce genre de pb je suis tout ouïe pour une explication

    Merci d'avance !

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 76
    Points : 210
    Points
    210
    Par défaut En cause le GROUP BY...
    Alors manifestement c'est le group by qui pose problème... seulement j'en ai besoin moi du Group by,
    je continu de chercher

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 76
    Points : 210
    Points
    210
    Par défaut
    Bon et bien je m'en suis sorti en retirant le ORDER BY...

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut RSS13.

    mon résultat pour la colonne MANDATS est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0x4D44542D5052533034303437352D5243522D303030303030303239392C4D44542D5052533034333834382D5243522D303030303030303330302C4D44542D5052533032383330342D5243522D30303030303030333031
    ce qui ne correspond absolument pas au résultat attendu.
    Votre résultat est de l'hexadécimal. J'ai donc cherché à le convertir afin de voir ce que cela donne.
    J'ai supprimé le '0x' qui se trouve au début de la chaîne et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --------------
    select unhex('4D44542D5052533034303437352D5243522D303030303030303239392C4D44542D5052533034333834382D5243522D303030303030303330302C4D44542D5052533032383330342D5243522D30303030303030333031')
    --------------
     
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | unhex('4D44542D5052533034303437352D5243522D303030303030303239392C4D44542D5052533034333834382D5243522D303030303030303330302C4D44542D5052533032383330342D5243522D30303030303030333031') |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | MDT-PRS040475-RCR-0000000299,MDT-PRS043848-RCR-0000000300,MDT-PRS028304-RCR-0000000301                                                                                                |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     
    Appuyez sur une touche pour continuer...
    Comment avez-vous fait pour obtenir un résultat en hexadécimal ?

    Votre colonne 'MANDAT_ID' est de quel type ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 76
    Points : 210
    Points
    210
    Par défaut
    Bonjour Artemus24,

    on peut se tutoyer ^^

    Effectivement c'est de l'hexadecimal, pour obtenir ce résultat honnêtement je ne sais pas comment j'ai bien pu faire, une piste : quand j'ai retiré le ORDER BY, le résultat était bon. Donc je pense que le comportement sql à du être changé avec ce ORDER BY. C'est un comportement assez étrange

    La colonne MANDAT_ID c'est du VARCHAR

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Bonjour RSS13.

    on peut se tutoyer ^^
    Oui, bien sûr, mais le vouvoiement est une forme de politesse quand on s'adresse à une personne que l'on ne connait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MDT-PRS040475-RCR-0000000299,MDT-PRS043848-RCR-0000000300,MDT-PRS028304-RCR-0000000301
    Est-ce que tu attendais ce résultat ?

    J'ai refais le test afin de comprendre comment obtenir un résultat en hexadécimal et je n'y suis pas arrivé.
    J'ai testé 'char', 'varchar', voir même 'binary', 'varbinary' et même 'blob'. Je n'ai rien obtenu de semblable.

    Pour faire la jointure entre vos trois tables, vous devriez faire un 'inner join'.
    Cela serait plus propre que l'écriture classique, qui fonctionne aussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT t1.CLE_LISTEPRELEVEMENT      AS 'List_Prélèvement'
           t1.DATE_PRELEVEMENT          AS 'Date_opération', 
           t3.NOM_UTILISATEUR           AS 'Utilisateur',
           t2.NUMPOSTE                  AS 'Numéro_Poste',
           t2.DATE_FICHIER              AS 'Date_prélèvement', 
           SUM(t2.MONTANT_PRELEVE_EURO) AS 'Montant',
           t2.CHEMIN_FICHIER            AS 'Chemin_fichier', 
           GROUP_CONCAT(t2.MANDAT_ID)   AS 'MANDATS'  
     
    FROM       LISTEPRELEVEMENT   AS t1
     
    inner join LIGNE_PRELEVEMENT  AS t2
    on (t2.CLE_LISTEPRELEVEMENT = t1.CLE_LISTEPRELEVEMENT)
     
    inner join UTILISATEUR        AS t3
    on (t3.CLE_LISTEPRELEVEMENT = t1.CLE_UTILISATEUR)
     
    WHERE t2.DATE_FICHIER >= '2014-07-13' 
    GROUP BY t1.CLE_LISTEPRELEVEMENT
    ORDER BY t1.CLE_LISTEPRELEVEMENT
    Quand je fais un 'group by', en général, je fais aussi un 'order by' sur les mêmes colonnes.

    Si tu veux que je teste un peu plus, il me faudrait les tables en sql et un jeu d'essai.
    Ainsi je saurai d'où vient le problème (enfin j'espère).

    Tu peux me l'envoyer à l'adresse email : "artemus24 @ jcz.fr"

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 76
    Points : 210
    Points
    210
    Par défaut
    C'est gentil, a priori le comportement est reproductible sur mysql,
    je n'ai malheureusement pas le temps de faire un jeu d'essai, je suis sur d'autre problématique (boulot oblige), à l'occasion j’essaierai de reproduire le problème sur des tables test, si d'ici là tu as du nouveau n'hésite pas
    Merci encore pour ton aide

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

Discussions similaires

  1. Trouver une suite de caractères
    Par ArHacKnIdE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/09/2006, 15h36
  2. Rechercher une suite de caractères
    Par Norin dans le forum Access
    Réponses: 8
    Dernier message: 04/08/2006, 15h56
  3. contraire de LIKE pour exclure une suite de caractères
    Par cortex024 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/05/2006, 12h35
  4. [VBA-E] Vérifier si une suite de caractère est présente
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/03/2006, 10h44

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