Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 13h31   #1
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Par défaut GROUP CONCAT: condition

Bonjour à tous et à toutes,

Je travaille sur workbench 5.2.

J'aimerai savoir s'il est possible de mettre une condition dans un GROUP_CONCAT car je ne trouve pas ceci sur la documentation mysql.
Sinon comment faire?

Imaginons un exemple:
Je possede une table client, une table commande et une table quantite

J'aimerai faire un groupe concat qui ressemblerai à ceci:
Code :
1
2
3
SELECT C.name
GROUP_CONCAT(CMD.libelle, " (", QTT.value, ")" SEPARATOR "\n" CONDITION QTT.value > 10)
GROUP_CONCAT(CMD.libelle, " (", QTT.value, ")" SEPARATOR "\n" CONDITION QTT.value < 10)
Bien entendu le mot clé CONDITION n'existe pas dans un GROUP CONCAT.

Merci d'avance pour votre aide.
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 13h49   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

directement dans le GROUP_CONCAT, je ne pense pas. Peut être trouver une combine dans un HAVING ?

Code sql :
1
2
3
4
5
 
SELECT GROUP_CONCAT(champ) AS gc
FROM TABLE
GROUP BY champ2
HAVING gc ???

Désolé de ne pas pouvoir t'aider plus...Peut être faire une sorte d'explode sur le séparateur mais c'est lourd...
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h02   #3
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Citation:
Envoyé par Madfrix Voir le message
Bonjour,

directement dans le GROUP_CONCAT, je ne pense pas. Peut être trouver une combine dans un HAVING ?

Code sql :
1
2
3
4
5
 
SELECT GROUP_CONCAT(champ) AS gc
FROM TABLE
GROUP BY champ2
HAVING gc ???

Désolé de ne pas pouvoir t'aider plus...Peut être faire une sorte d'explode sur le séparateur mais c'est lourd...
Merci d'avoir répondu.
Cependant, je ne pense pas que dans le HAVING ceci fonctionnerai car le group_concat s'execute avant il me semble.
La seul solution que je peux voir serai de faire des sous requetes mais je ne sais pas si ceci va fonctionner.
Donc si il y a une autre solution...
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h05   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Une sous requête comme l'a montré CinéPhil dans l'autre message devrait pouvoir te sortir d'affaire
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h08   #5
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Citation:
Envoyé par Madfrix Voir le message
Une sous requête comme l'a montré CinéPhil dans l'autre message devrait pouvoir te sortir d'affaire
D'accord, Je vais donc essayer ceci
Merci
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h23   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Quelque chose comme ca en somme

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT name, GROUP_CONCAT(CMD.libelle) FROM 
    (SELECT * FROM TABLE
      WHERE unChamp > 10
     ) AS group1
GROUP BY un autreChamp;
 
UNION
 
SELECT name, GROUP_CONCAT(CMD.libelle) FROM 
    (SELECT * FROM TABLE
      WHERE unChamp <= 10
     ) AS group2
GROUP BY un autreChamp;

(pas testé)

Fait gaffe à ne pas exclure 10 de tes 2 GROUP_CONCAT aussi
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 16h14   #7
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Citation:
Envoyé par Madfrix Voir le message
Quelque chose comme ca en somme

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
SELECT name, GROUP_CONCAT(CMD.libelle) FROM 
    (SELECT * FROM TABLE
      WHERE unChamp > 10
     ) AS group1
GROUP BY un autreChamp;
 
UNION
 
SELECT name, GROUP_CONCAT(CMD.libelle) FROM 
    (SELECT * FROM TABLE
      WHERE unChamp <= 10
     ) AS group2
GROUP BY un autreChamp;

(pas testé)

Fait gaffe à ne pas exclure 10 de tes 2 GROUP_CONCAT aussi
Merci pour cette réponse.
C'est comme cela que j'ai prossédé et je m'en suis sortie.
Pour plus de précisions:
http://www.developpez.net/forums/d87...rs-conditions/
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h53.


 
 
 
 
Partenaires

Hébergement Web