Une boucle d'affichage dynamique pour GROUP_CONCAT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une boucle d'affichage dynamique pour GROUP_CONCAT

Re: Une boucle d'affichage dynamique pour GROUP_CONCAT

par tof73 » 07 mai 2015, 12:21

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 ...

Une boucle d'affichage dynamique pour GROUP_CONCAT

par barok06 » 07 mai 2015, 09:44

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 !