Petit soucis pour optimiser un script

WRInaute passionné
J'ai parfois des erreurs SQL 2013 (connection perdue).
J'avais des connections persistantes que j'ai basculé en connection normales, mais le problème persiste parfois.

J'ai un script un peu complexe qui est peut-être à l'origine du problème.
Avez-vous une idée pour l'optimiser un petit peu ?

Code:
function sommaire($type) {	
	global $base_sommaire, $maj, $ancr, $tab;
	
	$connect = connectBD($base_sommaire);	
	$chapitre	= 'SELECT ind_id, ind_titre, ind_type, ind.page_id, pag.page_id FROM '.$base_sommaire['prefixe'].'ind AS ind, '.$base_sommaire['prefixe'].'page AS pag WHERE ind.page_id=pag.page_id AND page_nom="'.$type.'" AND ind_type="chapitre"';
	$res_chapitre	= requeteSql($chapitre, 'trouver les titres des chapitres de la page.');
	
	if	($var = mysql_num_rows($res_chapitre) ) {
		echo '<ol id="enteteCorps" class="sommaireChapitre">';
		while	($chapitre = mysql_fetch_assoc($res_chapitre) ) {
				$titre = $chapitre['ind_titre'];
				$ancr ++;
				$tab ++;
				
				echo '<li>
				<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>';
				if		($chapitre['ind_titre'] == 'Actualités quotidiennes sur les sciences et les technologies') {						
						echo Rss('http://www.futura-sciences.com/services/rss/actu10.xml', 9, 'sommaire');
						}								
				$sousChapitre	= 'SELECT * FROM '.$base_sommaire['prefixe'].'som WHERE ind_type="sous chapitre" AND ind_mere_id="'.$chapitre['ind_id'].'"';
				$res_sousChapitre	= requeteSql($sousChapitre, 'trouver les titres des sous chapitres de la page.');
				
				if	($var = mysql_num_rows($res_sousChapitre) ) {
					echo '<ol class="sommaireSousChapitre">';
					while	($sousChapitre = mysql_fetch_assoc($res_sousChapitre) ) {
							$titre = $sousChapitre['ind_titre'];
							$ancr ++;
							$tab ++;
							
							echo '<li>
							<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>';
							if	($sousChapitre['ind_titre'] == 'Les dernières nouveautés') {
								echo '<ol class="sommaireParagraphe">';
								for	($nb = 0; $nb < count($maj); $nb ++) {
									$titre = $maj[$nb]['titre'];
									$ancr ++;
									$tab ++;
										
									echo '<li>
									<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>
									</li>';
									}
								echo '</ol>';
								}											
							$paragraphe	= 'SELECT * FROM '.$base_sommaire['prefixe'].'som WHERE ind_type="paragraphe" AND ind_mere_id="'.$sousChapitre['ind_id'].'"';
							$res_paragraphe	= requeteSql($paragraphe, 'trouver les titres des paragraphes de la page.');
							
							if	($var = mysql_num_rows($res_paragraphe) ) {
								echo '<ol class="sommaireParagraphe">';
								while	($paragraphe = mysql_fetch_assoc($res_paragraphe) ) {
										$titre = $paragraphe['ind_titre'];
										$ancr ++;
										$tab ++;
										
										echo '<li>
										<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>';														
										$sousParagraphe	= 'SELECT * FROM '.$base_sommaire['prefixe'].'som WHERE ind_type="sous paragraphe" AND ind_mere_id="'.$paragraphe['ind_id'].'"';
										$res_sousParagraphe	= requeteSql($sousParagraphe, 'trouver les titres des sous paragraphes de la page.');
										
										if	($var = mysql_num_rows($res_sousParagraphe) ) {
											echo '<ol class="sommaireSousParagraphe">';
											while	($sousParagraphe = mysql_fetch_assoc($res_sousParagraphe) ) {
													$titre = $sousParagraphe['ind_titre'];
													$ancr ++;
													$tab ++;
													
													echo '<li>
													<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>';																	
													$texte	= 'SELECT * FROM '.$base_sommaire['prefixe'].'som WHERE ind_type="texte" AND ind_mere_id="'.$sousParagraphe['ind_id'].'"';
													$res_texte	= requeteSql($texte, 'trouver les titres des textes de la page.');
													
													if	($var = mysql_num_rows($res_texte) ) {
														echo '<ol class="sommaireTexte">';
														while	($texte = mysql_fetch_assoc($res_texte) ) {
																$titre = $texte['ind_titre'];
																$ancr ++;
																$tab ++;
																
																echo '<li>
																<a href="#som'.$ancr.'" tabindex="'.$tab.'">'.$titre.'</a>';
																echo '</li>';
																}
														echo '</ol>';
														}
													echo '</li>';
													}
											echo '</ol>';
											}
										echo '</li>';
										}
								echo '</ol>';
								}
							echo '</li>';
							}
					echo '</ol>';
					}
				echo '</li>';
				}
		echo '</ol>';
		}
}
 
WRInaute occasionnel
vaut mieux décire ce que vous faites. il faut éviter des boucles trop lentes. utilisez la pagination
 
WRInaute occasionnel
si votre boucle consiste à afficher 1000 liens à partir de la BD.
alors afficher 10 par 10. et faire aussi des requêtes 10 par 10.
avec des liens suivant précédent comme le forum
 
WRInaute passionné
nodom a dit:
si votre boucle consiste à afficher 1000 liens à partir de la BD.
alors afficher 10 par 10. et faire aussi des requêtes 10 par 10.
avec des liens suivant précédent comme le forum

Merci.

Pour le cas que je présente, cela me sert juste pour afficher le sommaire d'une page.
Donc pas de nécessité de bouton suivant - précédent.

Par contre cela me sera utile dans d'autres cas.
 
WRInaute impliqué
Tu n'as pas l'impression qu'il y a un peu beaucoup de requêtes SQL et de boucles dans ton petit bout de script quand tout pourrait être fait en une requête SQL et une boucle.
 
WRInaute passionné
shrom a dit:
Tu n'as pas l'impression qu'il y a un peu beaucoup de requêtes SQL et de boucles dans ton petit bout de script quand tout pourrait être fait en une requête SQL et une boucle.

C'est ce que je me dit, mais je ne sais pas comment, d'où le post ;)
 
WRInaute impliqué
medium69 a dit:
shrom a dit:
Tu n'as pas l'impression qu'il y a un peu beaucoup de requêtes SQL et de boucles dans ton petit bout de script quand tout pourrait être fait en une requête SQL et une boucle.

C'est ce que je me dit, mais je ne sais pas comment, d'où le post ;)

Fait des jointures entre tes tables.
 
Discussions similaires
Haut