Requête sur autre table dans une boucle sur jonction

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Titanboy, 11 Septembre 2014.

  1. Titanboy
    Titanboy WRInaute discret
    Inscrit:
    14 Mars 2006
    Messages:
    72
    J'aime reçus:
    0
    Bonjour à tous.

    Je bosse désespérément sur la rapidité de mon site. J'ai réduit pas mal de choses, mais la, quand je fais un webpagetest, je me rend compte que le site met 10 seconde a s'ouvrir complètement, dont 6 secondes sont consacrée uniquement à terminer d'ouvrir le code php. Les 4 secondes restantes sont pour les images etc...

    Je suppose donc qu'il y'a un problème avec mon codage, et je suppose avec mes requêtes mysql car je fais souvent des boucles dans des boucles.

    Voici mon code que j'ai simplifié (pas de balise, de class, de or die etc...):

    Code:
    <?php
    $req1 = $bdd->query('SELECT * FROM tableA, tableB WHERE tableA.id=tableB.idtableA AND tableB.votenote = 1 GROUP BY idtableA ORDER BY id DESC LIMIT 0,20');
    
    while ($result = $req1->fetch())
    {
    	$med = $bdd->query('SELECT COUNT(*) as total FROM tableB WHERE idtableA= "'.$result['id'].'"');
    	$moyenne = $med->fetch();
    	
    	$med2 = $bdd->query('SELECT COUNT(*) as total FROM tableB WHERE idtableA= "'.$result['id'].'" AND votenote ="1"');
    	$moyenne2 = $med2->fetch();
    	
    	$votetotal = $moyenne['total'];
    	$cumulpoints = $moyenne2['total'];
    	if ($votetotal != 0) 
    	{
    		$pourcentage = ($cumulpoints/$votetotal)*100 ;
    		if ($pourcentage < 20) $image= '<img src="a.jpg">';
    		if ($pourcentage >= 20) $image= '<img src="b.jpg">';
    	}
    	else $image= '<img src="f.jpg">';
    													
    		$lavignette[]='
    		<div>
    		<a href="rubrique/'.$result['url'].'">'._($result['titrearticle']).'</a>'.$image.'
    		</div>';
    }
    										
    echo $lavignette[0];
    if (isset($lavignette[1])) echo $lavignette[1];
    if (isset($lavignette[2])) echo $lavignette[2];
    if (isset($lavignette[3])) echo $lavignette[3];
    etc...
    ?>
    
    Comme vous le voyez, dans la $req1, je fait une jonction entre 2 tables, et pour chaque résultat de $req1, je vais chercher des infos dans une autre table. Est-ce que c'est cela qui pénalise la rapidité de ma page?
    En sachant que je fais plusieurs requêtes dans le meme genre que $req1 sur la meme page, plus d'autres requêtes diverses.
    Et en sachant aussi que j'utilise gettext, d'où les
    Comment faire en sorte que ça soit plus rapide? Une idée?
    Merci les gars! :wink:
     
  2. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    792
    J'aime reçus:
    0
    sous requete du genre
    select tablea.id, tablea.champa, (select count(tableb.id) from tableb where tableb.unid = tablea.id) as nb from tablea

    mettre les résultats dans une autre table, qui est mise à jour quand c'est nécessaire, afin d'éviter le group by systématique.
     
  3. Titanboy
    Titanboy WRInaute discret
    Inscrit:
    14 Mars 2006
    Messages:
    72
    J'aime reçus:
    0
    Merci loubet.

    La sous requête comme tu me le conseil rend vraiment la requête moins gourmande? :?:
     
Chargement...
Similar Threads - Requête table boucle Forum Date
[Cas d'école] Requête clé instable depuis plus de 8 ans Référencement Google 11 Mars 2019
Exécution requête sur bouton sur une ligne tableau Administration d'un site Web 5 Juillet 2017
Plutôt une grosse requête multitables ou plein de requêtes séparées ? Développement d'un site Web ou d'une appli mobile 24 Mai 2017
Problème pour passer un tableau en paramètre d'une requêtet SELECT. Développement d'un site Web ou d'une appli mobile 24 Mars 2017
Requetes SQL parfois lente : Selon show profile -> Pb opening table Développement d'un site Web ou d'une appli mobile 8 Juillet 2015
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
PB résultat Requête SQL avec jointure 3 tables Développement d'un site Web ou d'une appli mobile 12 Juin 2013
[MySQL] Requête SELECT entre 3 tables liées Développement d'un site Web ou d'une appli mobile 10 Août 2011
Requête sur deux tables problème champ / chaine Développement d'un site Web ou d'une appli mobile 28 Avril 2011
[mysql] trier les résultats d'une requête selon une table non liée à la requête Développement d'un site Web ou d'une appli mobile 15 Avril 2011