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 :
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']).")";
	}
Ensuite, je créer dynamiquement une table MySQL qui recevra notre croisé dynamique qui ressemblera à cela:

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
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`");
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 :

Voici le script de mon tableau croisé dynamique :
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;
				}
			}	
}
Le souci ici est que lorsqu’il y a 30 000 abonné par exemple le traitement est beaucoup trop long:
Quelqu’un aurait-il une solution d'optimisation?
Je désespère