Mysql :requete lourde comment alleger...

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

clemumm
Nouveau WRInaute
 
Messages: 18
Inscription: Lun Déc 03, 2007 4:24

Mysql :requete lourde comment alleger...

Message le Dim Fév 03, 2008 20:29

Bonjour,

J'ai un site avec une génération de sitemap basé sur l'interprétation de ma base de données. Jusqu'a aujourd'hui je listais mes fiches techniques en parcourant la table ou sont stocké les noms des bateaux (avec une boucle while). J'ai rajouté la possibilité de comparer 2 bateaux et j'aimerais bien integrer ces comparatifs au sitemap le problème c'est que la requète devient lourde (double boucle while).

Première solution => pendant mon listing de fiches je fait un "dictionnaire" du genre marque[bateau1] = nomdelamarque, comme ça plus besoin d'ouvrir la BDD pendant la "double boucle".

ça marche pour l'instant mais avec plus de bateaux j'ai peur que ça coince... comment reduire la charge du serveur (effacer le resultat des requetes? faire en plusieures étapes?...).

Merci d'avance

Clément

FlorentP
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 145
Inscription: Sam Juin 25, 2005 19:32

Message le Dim Fév 03, 2008 21:12

C'est quoi tes requetes et le schéma de tes tables ?

clemumm
Nouveau WRInaute
 
Messages: 18
Inscription: Lun Déc 03, 2007 4:24

Message le Dim Fév 03, 2008 21:40

Dans un premier temp je liste le fiches techniques et je créé les dictionnaires de marque et de modèle a chaque fois avec des boucles sur les resultats des requetes

Code: Tout sélectionner
//On liste les marques
$reqmarque = mysql_query("SELECT * FROM $tablemarque order by id ASC") or die ("erreur requete zz");
while( $marque = mysql_fetch_array ($reqmarque)){
   $idmarque = $marque["id"];
   $tmarque[$idmarque] = $marque[$lang];
}

//On liste les voiliers
$reqgenre = mysql_query("SELECT id,marque,dernieremod,modele,genre,type FROM $tablebateau order by id ASC") or die ("erreur requete zz");
while( $genre = mysql_fetch_array ($reqgenre)){
   $idmodele = $genre["id"];
   $idmarque = $genre["marque"];
   $lastmod = str_replace("/","",$genre["dernieremod"]);
   $derniermod[$idmodele] = $lastmod;
   $genremod[$idmodele] = $genre["modele"];
   $marquemod[$idmodele] = $genre["marque"];
   $argref = carspec($tmarque[$idmarque].$genre["modele"]);
   $ttext = $ttext.'<url><loc>'.$url.'voiliers-'.$lang.'/'.$idmodele.'-'.$argref.'.html</loc><lastmod>'.$lastmod.'</lastmod></url>';
   if(datetrans($lastmod) > datetrans($lastmodmarque[$idmarque])){$lastmodmarque[$idmarque] = $lastmod;}else{}
   $idtemp = $genre["type"];
   if(datetrans($lastmod) > datetrans($lastmodtype[$idtemp])){$lastmodtype[$idtemp] = $lastmod;}else{}
   $idtemp = $genre["genre"];
   if(datetrans($lastmod) > datetrans($lastmodgenre[$idtemp])){$lastmodgenre[$idtemp] = $lastmod;}else{}
   if(datetrans($lastmod) > datetrans($lastmodmax)){$lastmodmax = $lastmod;}else{}
}


Ensuite dans un second temp je fais une boucle sur le dictionnaire et une seconde a l'intérieur encore une fois sur le dictionnaire.

Code: Tout sélectionner
$reqgenre = mysql_query("SELECT id FROM $tablebateau order by id DESC LIMIT 0,1") or die ("erreur requete zz");
$genre = mysql_fetch_array ($reqgenre);
$derniermodele = $genre["id"];
//On liste les comparatifs
for($idmodele=1000; $idmodele != $derniermodele ; $idmodele++){
   for($idmodele2=$idmodele; $idmodele2 != $derniermodele ; $idmodele2++){
      $idmarque = $marquemod[$idmodele];
      $idmarque2 = $marquemod[$idmodele2];
      $lastmod = $derniermod[$idmodele];
      $lastmod2 = $derniermod[$idmodele2];
      if($lastmod2 > $lastmod){$lastmod = $lastmod2;}else{}
      $argref= carspec($tmarque[$idmarque].$genremod[$idmodele].'vs'.$tmarque[$idmarque2].$genremod[$idmodele2]);
      $ttext = $ttext.'<url><loc>'.$url.'voiliers-'.$lang.'/'.$idmodele.'-'.$idmodele2.'-'.$argref.'.html</loc><lastmod>'.$lastmod.'</lastmod></url>';
   }
}


Pour la structure ici j'utilise deux tables marque et modele. Dans modele je stock quasiement tous et marque je stocke le nom suivant la langue.


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités