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 :

Comment générer une "entête commune" à plusieurs records groupés par un identifiant commun [MySQL-5.5]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Comment générer une "entête commune" à plusieurs records groupés par un identifiant commun
    Bonjour,

    Je vais commencer par décrire un modèle "réduit" du problème (qui vient d'un besoin pour la CI d'un client).
    La table contient les champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    changeId
    jobName
    buildId
    le même changeId se retrouve dans plusieurs enregistrements avec jobName et buildId différents.
    Je cherche à générer une liste qui aurait la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    changeId1
    job1#build13
    job2#build25
    job3#build30
    changeId2
    job5#build55
    job6#build61
    job8#build86

    C'est en réalité plus complet (il y a plus de champs) et le format est en réalité du json. Mais ça n'est pas plus complexe, d'autant qu'une seule table est impliquée.
    Néanmoins, Je ne parviens pas à construire une requête (ou requêtes imbriquées) qui me donne cette sortie.

    Bien entendu, la table de départ contient toutes les informations pour chaque changeId.

    Je suppose que quelqu'un me répondra que ce n'est pas bien d'avoir des valeurs qui se répètent dans plusieurs enregistrement, mais pour l'instant c'est une contrainte que je ne peux lever.

    Merci de votre aide éventuelle, et n'hésitez pas à me demander des précisions supplémentaires si le problème n'est pas clairement exposé.

    J-L

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Ce que je parviens à faire
    J'essaie d'avancer ... et ça explique sans doute mieux le problème :

    Evidemment, je parviens à lister tous les records dans l'ordre des changeId :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select changeId,jobName,buildNbr from maTable
    WHERE "une clause qui me permet de ne sélectionner que certains jobs" (la clause n'est pas dans le problème)
    ORDER BY maTable.changeId
    Et je sais aussi afficher la liste unique des changeId, avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select DISTINCT tblBuild.strUserParam1
    FROM tblBuild
    WHERE ...
    ORDER BY tblBuild.strUserParam1
    Et donc, le problème ici posé est comment faire un SELECT tel que :
    "pour chacune des valeurs du second select, j'affiche la valeur en question suivie de tous les couples jobName,buildNbr correspondants.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 22
    Points
    22
    Par défaut On n'est jamais si bien servi que par la force du GROUP !
    Bon, eh bien je crois que j'ai trouvé une solution à base de GROUP_CONCAT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT maTable.changeId,
        GROUP_CONCAT(CONCAT_WS("\t: ",maTable.jobName,maTable.buildId)
            ORDER BY maTable.jobName DESC SEPARATOR '\n'
        )
    FROM maTable
    WHERE (la clause qui va bien et qui n'est pas dans le problème)
    GROUP BY maTable.changeId
    A partir de là, je devrais arriver à formatter les données récupérées comme je veux.

    Je laisse cette dicussion ouverte quelque temps au cas où un expert de la chose aurait une idée brillante à me proposer.

    Merci de votre aide

    J-L

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 22
    Points
    22
    Par défaut On ferme !
    Considérons que c'est résolu.
    A mettre en relation avec cette autre discussion.

  5. #5
    Membre régulier
    Homme Profil pro
    Analyste-programmeur
    Inscrit en
    Décembre 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2014
    Messages : 52
    Points : 112
    Points
    112
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT changeid, job_id, buildId, job_and_build
    FROM
    (
    SELECT DISTINCT(changeid) AS changeid, NULL AS job_id, NULL AS buildId, NULL AS job_and_build
    FROM all_jobs UNION ALL
    SELECT changeid AS changeid, jobname job_id, buildid AS buildId, CONCAT(jobname, '#', buildid) as job_and_build
    FROM all_jobs
    ) t1
    ORDER BY changeid ASC, job_id ASC, buildId ASC

  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 469
    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 469
    Points : 19 462
    Points
    19 462
    Par défaut
    Salut 6BerYeti.

    Ce n'est pas une bonne idée d'avoir introduit les caractères de saut de lignes ("\n") et de tabulations ("\t") pour faire de la présentation.
    Et d'après ce que j'ai compris, le fichier de sortie doit être formaté en json.
    Pourquoi ne pas utiliser les nouvelles fonctions json de mysql 5.7 ?
    --> https://dev.mysql.com/doc/refman/5.7...functions.html

    @+

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/08/2006, 14h15
  2. [VS.NET]Comment générer une dll de page ?
    Par fnganiet dans le forum Visual Studio
    Réponses: 4
    Dernier message: 19/05/2006, 14h28
  3. Comment générer une image dynamiquement ?
    Par K20 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2005, 01h27
  4. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 21h29

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