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 :

Concaténer les valeurs de plusieurs champs


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Par défaut Concaténer les valeurs de plusieurs champs
    Bonjour à vous !

    Je reste un peu surpris de ne pas trouver d'information concernant la concaténation de réponses dans un seul champ.

    Exemple :
    SELECT CONCAT_WS(',' , [liste de toutes mes désignations répondant à la sous-requète SELECT `designation` FROM table WHERE `condition` = 'remplie']

    De la même façon qu'il y a MAX(`champ`) qui va chercher le maximum d'un champ (contrairement à GREATEST(`champ1`, `champ2`, `champ3...`)), je recherche cette fonction XXX qui va concaténer toute une colonne (et contrairement à CONCAT(`champ1`, `champ2`, `champ3...`) qui ne concatène que des valeurs prédéterminées).

    Est-ce que ma demande est un peu claire ? Sinon, redemandez-moi

    Merci à vous

  2. #2
    Membre chevronné
    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
    Par défaut
    Ne rechercherais-tu pas la fonction GROUP_CONCAT ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GROUP_CONCAT([DISTINCT] expr [,expr ...]
                 [ORDER BY {unsigned_integer | col_name | expr}
                     [ASC | DESC] [,col_name ...]]
                 [SEPARATOR str_val])

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Par défaut
    Super, merci beaucoup

    En effet, c'est celle-ci...
    Je n'avais rien trouvé avec google ni, pire, sur la doc mysql, et il y a 20 minutes après avoir posté ce message, je tombe sur un autre post qui en parle...

    Cette fonction est très mal rangée dans la doc MySql car elle n'est pas dans les fonctions de chaîne, mais dans les fonctions GROUP BY alors, qu'à part un nom à consonnance identique, elle n'a pas grand chose à y voir.
    http://dev.mysql.com/doc/refman/5.0/...functions.html

    Notons au passage que cette fonction peut être combinée avec le IN() dans des clauses WHERE, ce qui la rend très puissante :
    article sur IN et GROUP_CONCAT

    Également, il faut parfois la combiner avec un CAST pour ne pas qu'elle retourne une sorte d'erreur "blob" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT GROUP_CONCAT( CAST( `id` AS CHAR ) SEPARATOR "," ) FROM `ma_base`
    Merci et à bientôt

  4. #4
    Membre habitué
    Homme Profil pro
    ingénieur informaticien
    Inscrit en
    Mars 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien

    Informations forums :
    Inscription : Mars 2008
    Messages : 11
    Par défaut
    Merci beaucoup pour cette réponse complète! Cela répond totalement à ma problématique du jour!

  5. #5
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par papa6 Voir le message
    Cette fonction est très mal rangée dans la doc MySql car elle n'est pas dans les fonctions de chaîne, mais dans les fonctions GROUP BY alors, qu'à part un nom à consonnance identique, elle n'a pas grand chose à y voir.
    http://dev.mysql.com/doc/refman/5.0/...functions.html
    Elle y est au contraire tout à fait à sa place, car sans GROUP BY elle n'a pas grande pertinence.
    Ceci dit, bien que très pratique, cette fonction n'existe que chez MySQL et sort donc toute requête qui l'utilise d'une quelconque portabilité avec PDO, par exemple.
    C'est ce même genre d'ouvertures qui font que de nombreux professionnels se détournent de MySQL au profit de PostgreSQL.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Concaténation de toutes les valeurs d'un champ
    Par ypcman dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/05/2014, 17h59
  2. [AC-2000] Liste déroulante avec les valeurs de plusieurs champs
    Par forges dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/09/2011, 09h28
  3. Réponses: 1
    Dernier message: 17/02/2011, 12h08
  4. Réponses: 7
    Dernier message: 30/01/2008, 18h39
  5. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 11h23

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