Une boucle d'affichage dynamique pour GROUP_CONCAT
Posté : 07 mai 2015, 09:44
Besoin d'aide !
J'ai deux tables :
une table bureau :
et une table Absence :
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 :
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 :
Mais je patauge ....
Merci de votre 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');
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');
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;
Code : Tout sélectionner
CONCAT(
'GROUP_CONCAT(IF(Mois = "',
Date ,
'", "")) AS ',
Mois
)
Merci de votre aide !