IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Temps de réponse tableau double entrée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut Temps de réponse tableau double entrée
    Bonjour à tous,

    Je génère un tableau un double entré avec un nombre de ligne et de colonne variable.

    Et donc dans chaque cellule une opération s'effectue (rien de bien méchant une variable prend 1 ou 0 si au mois un résultat est retourné pour la ligne corespondant à la colonne)

    Autant de dire qu'avec 150 lignes et 43 colonnes l'opération s'effectue 6 450 fois.

    Les temps de réponse sont alors de plusieurs minutes.

    Je ne saisi pas trop comment faire pour réduire ces temps de réponse.

    J'ai déjà commencé l'optimisation sur les champs en sélection de mes requêtes et sur les types de donnée des tables, pas de résultat probant...

    Les index, le cache peuvent ils améliorer le temp de réponse ?
    Si vous avez d'autres solutions merci d'avance !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 698
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 698
    Par défaut
    montre nous le code que tu exécutes dans la boucle

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut
    le voici, merci d'avance :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <table width="100%" border="1" style="empty-cells: show; border-collapse: collapse;">
    <?
    $retour_tete = mysql_query("	SELECT report_tete.id_report, id_mag, ville, num_centre, type_centre, cp, date_visite, nom_enseigne, secteur_util
    				FROM report_tete
    			        INNER JOIN magasin
    			        ON report_tete.id_mag=magasin.id_magasin
    			        INNER JOIN enseigne
    				ON magasin.enseigne=enseigne.id_enseigne
    				INNER JOIN utilisateur
    			        ON report_tete.id_util = utilisateur.id_util
    				$critere_etat 
    				$critere_enseigne 
    				$critere_type 
    				$critere_categorie
    				ORDER BY cp ASC");
     
     
    $retour_prod = mysql_query("	SELECT code_simpl 
    				FROM produit_affectation
    				INNER JOIN produit
    				ON produit_affectation.id_produit=produit.id_produit
    				WHERE produit.id_famille='$famille'
    				AND produit_affectation.id_enseigne='$enseigne'
    				ORDER BY code_simpl ASC");															
    ?>
    <tr>
    	<td>Secteur</td>
    	<td>Enseigne</td>
    	<td>Type de centre</td>
    	<td>N° de centre</td>
    	<td>Ville</td>
    	<td>CP</td>
    	<td>Date report</td>
    	<td>Nbre de réf. présentes</td>	
    	<?
    	while ($donnees_prod = mysql_fetch_array($retour_prod)) 
    		{ 
     
    		$code_simpl = $donnees_prod['code_simpl']; 
    		 ?>
    		<td><? echo $code_simpl; ?></td>
    <?		} ?>		
    </tr>
     
     
     
     
    <?
    	while ($donnees_tete = mysql_fetch_array($retour_tete)) 
    	{
    	$nom_enseigne = $donnees_tete['nom_enseigne'];
    	$id_mag = $donnees_tete['id_mag'];
    	$num_report = $donnees_tete['id_report'];
    	$ville = $donnees_tete['ville'];
    	$num_centre = $donnees_tete['num_centre'];
    	$cp = $donnees_tete['cp'];
    	$type_centre = $donnees_tete['type_centre'];
    	$secteur = $donnees_tete['secteur_util'];
    	$date_visite = dateUsToFr($donnees_tete['date_visite']);
     
    	$retour_detail = mysql_query("	SELECT id_detail FROM report_detail
    					INNER JOIN produit
    					ON report_detail.id_produit=produit.id_produit
    					WHERE id_report='$num_report'
    					AND produit.id_famille='$famille'");
    	$nb_detail= mysql_num_rows($retour_detail); ?>
     
    	<tr>
    		<td><? echo $secteur; ?></td>
    		<td><? echo $nom_enseigne; ?></td>
    		<td><? echo $type_centre; ?></td>
    		<td><? echo $num_centre; ?></td>
    		<td><? echo $ville; ?></td>
    		<td><? echo $cp; ?></td>
    		<td><? echo $date_visite; ?></td>
    		<td><? echo $nb_detail; ?></td>
    <?
    	$retour_prod1 = mysql_query("	SELECT produit_affectation.id_produit
    					FROM produit_affectation
    					INNER JOIN produit
    					ON produit_affectation.id_produit=produit.id_produit
    					WHERE produit.id_famille='$famille'
    					AND produit_affectation.id_enseigne='$enseigne'
    					ORDER BY code_simpl ASC");		
     
    	while ($donnees_prod1 = mysql_fetch_array($retour_prod1)) 
    		{ 
    			$id_produit = $donnees_prod1['id_produit'];
    			$retour_presence = mysql_query("SELECT id_detail FROM report_detail WHERE id_report='$num_report' AND id_produit='$id_produit'");
    			$nb_presence= mysql_num_rows($retour_presence); 
    			if ($nb_presence == '1') { $affich = 'X';} else {$affich = ''; }
     
    			?>
    			<td>
    				<?
    				echo $affich; 
    				?>
    			</td>
     
    <?		} ?>				
    	</tr>
     
     
    <? } ?>
    	</table>

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 698
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 698
    Par défaut
    le problème dans ta boucle ne vient pas de PHP mais de MySQL
    pour gagner beaucoup de temps il faudrait que tu récupères toutes les informations avec une seule requête, avant de faire la double boucle

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 261
    Par défaut
    Oui je m'en doutais mais je ne vois pas comment, si quelqu'un à une idée ?

    Merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/02/2013, 11h12
  2. tableau double entrée et requete sql
    Par oceane751 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/11/2005, 14h25
  3. [MySQL] Tableau double entrée et requete sql
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/11/2005, 09h07
  4. tableau double entrée
    Par Andrey dans le forum C
    Réponses: 16
    Dernier message: 08/11/2005, 15h33
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo