Page 1 sur 1

Une boucle d'affichage dynamique pour GROUP_CONCAT

Posté : 07 mai 2015, 09:44
par barok06
Besoin d'aide !

J'ai deux tables :
une table bureau :

Code : Tout sélectionner

-- Structure de la table `Bureau` `ID` int(5) NOT NULL AUTO_INCREMENT, `Nom` text COLLATE utf8_roman_ci NOT NULL, `Prenom` text COLLATE utf8_roman_ci NOT NULL, `Fonct` text COLLATE utf8_roman_ci NOT NULL, PRIMARY KEY (`ID`) -- Contenu de la table `Bureau` (`ID`, `Nom`, `Prenom`, `Fonct`) VALUES (1, 'XXX1', 'Michelle', 'Présidente'), (2, 'XXX2', 'Michelle', 'Trésorière'), (3, 'XXX3', 'Patricia', 'Secrétaire'), (4, 'XXX4', 'François', 'Membre'), (5, 'XXX5', 'Martine', 'Membre'), (6, 'XXX6', 'Alex', 'Membre');
et une table Absence :

Code : Tout sélectionner

-- Structure de la table `Absence` `ID` int(11) NOT NULL AUTO_INCREMENT, `Num` int(11) NOT NULL, `Mois` text COLLATE utf8_roman_ci NOT NULL, `Date` text COLLATE utf8_roman_ci NOT NULL, PRIMARY KEY (`ID`) -- Contenu de la table `Absence` (`ID`, `Num`, `Mois`, `Date`) VALUES (1, 1, '2015-02', 'du 6 au 19'), (2, 1, '2015-03', 'du 6 au 19'), (3, 3, '2015-02', 'du 15 au 22'), (4, 1, '2015-03', 'du 29 au 31'), (5, 3, '2015-03', 'du 1 au 8');
Avec lesquelles j'obtiens le tableau suivant :

Prénom ---> Nom ------> 2015-02 ---------------------> 2015—03 ------------> 2 015-04------>etc...
Michelle ---> XXX1 ----> du 6 au 10 ----------> du 6 au 19 du 29 au 31
Michelle ---> XXX2
Patricia ----> XXX3
François ---> XXX4 ----> du 15 au 22 --------------> du 1 au 8
Martine ----> XXX5
Alex ---------> XXX6



Grace à la requête suivante :

Code : Tout sélectionner

SELECT `Bureau`.`Nom` ,`Bureau`.`Prenom` AS Prénom , GROUP_CONCAT(IF(`Mois`="2015-02", `Date`, "")) AS "Février 2015", GROUP_CONCAT(IF(`Mois`="2015-03", `Date`, "")) AS "Mars 2015", GROUP_CONCAT(IF(`Mois`="2015-04", `Date`, "")) AS "Avril 2015", GROUP_CONCAT(IF(`Mois`="2015-05", `Date`, "")) AS "Mai 2015", GROUP_CONCAT(IF(`Mois`="2015-06", `Date`, "")) AS "Juin 2015", GROUP_CONCAT(IF(`Mois`="2015-07", `Date`, "")) AS "Juillet 2015", GROUP_CONCAT(IF(`Mois`="2015-08", `Date`, "")) AS "Août 2015" FROM `Absence` RIGHT JOIN `Bureau` ON `Absence`.`Num` = `Bureau`.`ID` GROUP BY `Bureau`.`ID` ORDER BY `Bureau`.`ID` ASC;
Je cherche une boucle pour remplacer les lignes GROUP_CONCAT .... et les rendre dynamiques au lieu d'écrire chaque fois (`Mois`="2015-08") du style :

Code : Tout sélectionner

CONCAT( 'GROUP_CONCAT(IF(Mois = "', Date , '", "")) AS ', Mois )
Mais je patauge ....
Merci de votre aide !

Re: Une boucle d'affichage dynamique pour GROUP_CONCAT

Posté : 07 mai 2015, 12:21
par tof73
c'est plutôt à l'affichage des données issues de la requete sql qu'il faut faire ce genre de traitement, donc la requete comprend
select ..., Mois, Date from ...