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 :

Agreger des données de type caracteres


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Par défaut Agreger des données de type caracteres
    Bonjour,

    J'ai une table de ce type:

    Prof Groupe Etudiant

    Prof1 Gr1 Etudiant1
    Prof1 Gr1 Etudiant2
    Prof1 Gr2 Etudiant3
    Prof2 Gr1 Etudiant1
    Prof2 Gr1 Etudiant2

    En une seule requête je voudrais avoir le résultat suivant (Je concatène les noms des étudiants pour un même prof et un même groupe):

    Prof1 Gr1 Etudiant1, Etudiant2
    Prof1 Gr2 Etudiant3
    Prof2 Gr1 Etudiant1, Etudiant2

    J'ai pensé à une requête de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select 
    	Prof,
    	Groupe,
    	IF(@ListeEtudiant='', 
    		@ListeEtudiant:=test1.Etudiant,
    		@ListeEtudiant:=CONCAT(@ListeEtudiant, ", ",test1.Etudiant)
    	) as Liste
    from Test1, (select @ListeEtudiant='') r
    group by 
    	Prof,
    	Groupe
    Mais la requête ne fonctionne pas ...

    Elle retourne ceci
    "Prof1" "Gr1" "Etudiant1"
    "Prof1" "Gr2" "Etudiant1, Etudiant2, Etudiant3"
    "Prof2" "Gr1" "Etudiant1, Etudiant2, Etudiant3, Etudiant1"

    J'ai donc décide de réinitialiser ma liste à chaque fois que je change de regroupement en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select 
    	Prof,
    	Groupe,
    	IF(INSTR(@ListeEtudiant, CONCAT(Prof, Groupe))= 0,
    		@ListeEtudiant:=CONCAT("[", Prof, Groupe, "]", test1.Etudiant),
    		@ListeEtudiant:=CONCAT(@ListeEtudiant, ", ",test1.Etudiant)
    	) as Liste
    from Test1, (select @ListeEtudiant:='') r
    group by 
    	Prof,
    	Groupe;
    Mais le résultat n'est toujours pas correct
    "Prof1" "Gr1" "[Prof1Gr1]Etudiant1"
    "Prof1" "Gr2" "[Prof1Gr2]Etudiant3"
    "Prof2" "Gr1" "[Prof2Gr1]Etudiant1"


    Quelqu'un a une idée (J'utilise MySQL 5.0.27) ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Ce que vous cherchez à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du logiciel qui utilise les données.
    Ceci dit, vous compliquez votre requête inutilement !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Prof, Groupe, GROUP_CONCAT(Etudiant SEPARATOR ', ') AS liste_etudiants
    FROM Test1
    GROUP BY Prof, Groupe
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Par défaut
    Merci pour la réponse ...

    Ne connaissant pas cette fonction je suis allé voir un peu sur Internet et la compatibilité de GROUP_CONCAT avec SQL Server (que j'utilise par ailleurs) je suis tombé sur ceci
    Je me garderai donc bien de relancer le débat sur la cosmétique ...


    Ce qu'il y de sur c'est que la réponse apportée correspond parfaitement à mes attentes.

    Merci encore

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

Discussions similaires

  1. Arrondi des données de type real
    Par YOYOVbSQL dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2006, 09h02
  2. [Architecture]Taille des données de type number
    Par Nick_Holmes dans le forum Oracle
    Réponses: 6
    Dernier message: 16/06/2006, 14h17
  3. Parsing XML gestion DB I/O sur des données de type CLOB
    Par stchitembo dans le forum Oracle
    Réponses: 5
    Dernier message: 22/03/2006, 11h14
  4. [Access] Enregistrer des données de type Texte RTF
    Par portu dans le forum Bases de données
    Réponses: 22
    Dernier message: 27/10/2005, 22h54
  5. Réponses: 5
    Dernier message: 13/07/2005, 10h03

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