Bon, je viens de faire des tests sur une simple page php sans appel AJAX, et j'obtiens également une page blanche si aucun filtre donc si traitement des 60000 enregistrements.
Le pb vient donc directement de ce traitement trop complexe de mes enregistrements. Et là je suis mal car je ne sais pas comment améliorer ce traitement.
Le résultat de mon script donne une liste structurée (avec arborescence sur 3 niveaux : catégories/sous-catégories/sous-sous-catégories) de mes enregistrements que j'explose via des boucles While successives :
-> CatégorieA
-> Sous-catégorie1 (appartenant à CatégorieA)
-> Sous-sous-catégorieA (appartenant à Sous-catégorie1)
-> Enregistrement1 (appartenant à Sous-sous-catégorieA)
-> Enregistrement2 (appartenant à Sous-sous-catégorieA)
-> Enregistrement3 (appartenant à Sous-sous-catégorieA)
-> Sous-sous-catégorieB (appartenant à Sous-catégorie1)
-> Enregistrement4 (appartenant à Sous-sous-catégorieB)
-> Enregistrement5 (appartenant à Sous-sous-catégorieB)
-> Enregistrement6 (appartenant à Sous-sous-catégorieB)
-> Sous-catégorie2 (appartenant à CatégorieA)
-> Sous-sous-catégorieC (appartenant à Sous-catégorie2)
-> Enregistrement7 (appartenant à Sous-sous-catégorieC)
-> Enregistrement8 (appartenant à Sous-sous-catégorieC)
-> Enregistrement9 (appartenant à Sous-sous-catégorieC)
-> Sous-sous-catégorieD (appartenant à Sous-catégorie2)
-> Enregistrement10 (appartenant à Sous-sous-catégorieD)
-> Enregistrement11 (appartenant à Sous-sous-catégorieD)
-> Enregistrement12 (appartenant à Sous-sous-catégorieD)
...etc.
-> CatégorieB
-> Sous-catégorie3 (appartenant à CatégorieB)
-> Sous-sous-catégorieE (appartenant à Sous-catégorie3)
-> Enregistrement13 (appartenant à Sous-sous-catégorieE)
-> Enregistrement14 (appartenant à Sous-sous-catégorieE)
-> Enregistrement15 (appartenant à Sous-sous-catégorieE)
-> Sous-sous-catégorieF (appartenant à Sous-catégorie3)
-> Enregistrement16 (appartenant à Sous-sous-catégorieF)
-> Enregistrement17 (appartenant à Sous-sous-catégorieF)
-> Enregistrement18 (appartenant à Sous-sous-catégorieF)
-> Sous-catégorie4 (appartenant à CatégorieB)
-> Sous-sous-catégorieG (appartenant à Sous-catégorie4)
-> Enregistrement19 (appartenant à Sous-sous-catégorieG)
-> Enregistrement20 (appartenant à Sous-sous-catégorieG)
-> Enregistrement21 (appartenant à Sous-sous-catégorieG)
-> Sous-sous-catégorieH (appartenant à Sous-catégorie4)
-> Enregistrement22 (appartenant à Sous-sous-catégorieH)
-> Enregistrement23 (appartenant à Sous-sous-catégorieH)
-> Enregistrement24 (appartenant à Sous-sous-catégorieH)
...etc.
...etc.
Sachant qu'il y a 7 catégories, comprenant chacune env. 9 sous-catégories, lesquelles comprenant chacune env. 12 sous-sou-catégories, lesquelles comprenant chacune env. 80 enregistrements
On obtient donc mes 7 x 9 x 12 x 80 = env. 60000 enregistrements dans ma BDD.
Ca donne ça, en version simplifiée :
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 39 40 41 42
|
$req1 = "SELECT id_categorie, numero_categorie, nom_categorie FROM table_categories ORDER BY numero_categorie ASC";
$res1 = mysql_query($req1) or die(mysql_error());
echo '<ul id="niveau1">';
while ($enr1 = mysql_fetch_array($res1)) {
$IDCATEG = $enr1['id_categorie'];
$CATEG = $enr1['numero_categorie']." - ".$enr1['nom_categorie'];
echo '<li>'.$CATEG.
'<ul id="niveau2">';
$req2 = "SELECT id_sous_categorie, numero_sous_categorie, nom_sous_categorie FROM table_sous_categories WHERE id_categorie LIKE ".$IDCATEG." ORDER BY numero_sous_categorie ASC";
$res2 = mysql_query($req2) or die(mysql_error());
while ($enr2 = mysql_fetch_array($res2)) {
$IDSOUSCATEG = $enr2['id_sous_categorie'];
$SOUSCATEG = $enr2['numero_sous_categorie']." - ".$enr2['nom_sous_categorie'];
echo '<li>'.$SOUSCATEG.
'<ul id="niveau3">';
$req3 = "SELECT id_sous_sous_categorie, numero_sous_sous_categorie, nom_sous_sous_categorie FROM table_sous_sous_categories WHERE id_sous_categorie LIKE ".$IDSOUSCATEG." ORDER BY numero_sous_sous_categorie ASC";
$res3 = mysql_query($req3) or die(mysql_error());
while ($enr3 = mysql_fetch_array($res3)) {
$IDSOUSSOUSCATEG = $enr3['id_sous_categorie'];
$SOUSSOUSCATEG = $enr3['numero_sous_sous_categorie']." - ".$enr3['nom_sous_sous_categorie'];
echo '<li>'.$SOUSSOUSCATEG.
'<ul id="listage">';
$req4 = "SELECT champ1, champ2, champ3 FROM ma_table WHERE id_sous_sous_categorie LIKE ".$IDSOUSSOUSCATEG." ORDER BY champ1 ASC";
$res4 = mysql_query($req4) or die(mysql_error());
while ($enr4 = mysql_fetch_array($res4)) {
$CHAMP1= $enr4['champ1'];
$CHAMP2= $enr4['champ2'];
$CHAMP3= $enr4['champ3'];
echo '<li>'.$CHAMP1.' - '.$CHAMP2.' - '.$CHAMP3.'</li>';
}
mysql_free_result($res4);
echo '</ul></li>';
}
mysql_free_result($res3);
echo '</ul></li>';
}
mysql_free_result($res2);
echo '</ul></li>';
}
mysql_free_result($res1);
echo '</ul>'; |
J'ai donc 4 boucles While imbriquées qui parcourent chacune des milliers d'enregistrements, ça fait lourdingue !
Comme je le disais dans mon post initial, j'ai modifié les paramètres php.ini, j'ai aussi pris soin de mettre des clés primaires sur mes id uniques de champs, et des index sur les clés étrangères dans mes différentes tables.
Je suis perplexe...
Le pire c'est que, il y a qq années, j'avais réalisé la même appli mais sous Access 97 et Visual Basic, avec sensiblement les mêmes structures de requêtes, et ça tournait super bien avec le même volume d'enregistrements, alors je l'ai un peu mauvaise de constater que Access 97/VB serait plus puissant que mon couple préféré PHP/MySQL !!!
Où alors j'ai raté un truc d'optimisation ou de paramétrage...
Merci d'avance si vous avez des idées !
Heu... je fais comment pour déplacer ce post, manifestement il n'a plus sa place dans la rubrique AJAX !
Partager