Bonjour à tous ,
J'ai créé un croisé dynamique en procédant de la manière suivante :
- création d'un tableau à deux dimension qui contient des abonnées avec leur options.
ex :
abonne1 | option 1 | option2 | option3
abonne2 | option 2 | option3
etc
Voici le script :
Ensuite, je créer dynamiquement une table MySQL qui recevra notre croisé dynamique qui ressemblera à cela:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $aboneOptions = array(); while($uneligne=mysql_fetch_array($rq_abonne_options_codeService)) { $aboneOptions[$uneligne['abonne']][] = "".rtrim($uneligne['options']). " (".rtrim($uneligne['code_service']).")"; }
abonne | nom | prénom| adresse| option1| option2| option3
-------------------------------------------------------------------------
abonne1 | zaza | toto | ..........| X | X |
abonne2 | zozo | titi | ..........| X | | X
Les champs (abonne, nom, prénom, adresse) sont des champs fixe mais les options sont des champs variables :
Voici le script SQL de la création de ma table dynamique
Ensuite, je parcours le tableau à deux dimension, et lorsque je pointe sur un abonné j'injecte des données le concernant dans la table dynamique , et je met une croix en dessous de la bonne option avec une requête update :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // creation d'une table dynamique $requete = "CREATE TABLE `extract_excel` ( `abonne` text NOT NULL, `nom` text NOT NULL, `prenom` text NOT NULL, `adresse` text NOT NULL, `num_abonne` text NOT NULL, "; while ($uneligne=mysql_fetch_array($rq_code_service)) { $requete.= "`".rtrim($uneligne['options']). " (".rtrim($uneligne['code_service']).")` text NOT NULL," ;//rtrim() permet de supprimer les espaces en fin de chaine } $requete .= "`date_deconnexion` date NOT NULL) ;"; $creation_table=mysql_query($requete); mysql_query("ALTER TABLE `extract_excel` DROP `date_deconnexion`");
Voici le script de mon tableau croisé dynamique :
Le souci ici est que lorsqu’il y a 30 000 abonné par exemple le traitement est beaucoup trop long:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 $i=0; $tab = array(); foreach($aboneOptions as $abone=>$options) { $rq_2bis=mysql_query("SELECT DISTINCT abonne,nom,prenom,adresse from croise_dynamique where abonne ='$abone' "); $ligne=mysql_fetch_array($rq_2bis); $nom=$ligne['num_compte']; $prenom=$ligne['carte_jumelle']; $adresse=$ligne['fax']; // on injecte les donnees dans une table pour l'extraction excel mysql_query ("insert into extract_excel(`abonne`,`nom`,`prenom`,`adresse`) values('$abonne','$nom','$prenom','$adresse')"); $j=0; $cpt_true=0; // compteur pour determiner si option trouvé //on parcours les options foreach($options as $o) { //tant qu'on a pas trouvé l'option de l'abonne on compare l'option de la 'colone= $option[$j]' avec l'option de 'l'abonne=$o' if (isset($option[$j])) { while ((($cpt_true!=1)|| ($cpt_true==0) ) and $j<=$nb_tablo) { if($option[$j]==$o) { // on injecte les valeur de une table mysql_query ("update extract_excel set`$o` ='X' "); $j++; $cpt_true=1;//1 } else { $j++; } } $cpt_true=0; } } }
Quelqu’un aurait-il une solution d'optimisation?
Je désespère![]()
Partager