Mysql :requete lourde comment alleger...
3 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Mysql :requete lourde comment alleger...
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
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
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
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.
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.
- 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.
3 messages • Page 1 sur 1
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 :
- Google API : guide de développement de l'API Google
- Parts de marché des moteurs en Europe (Février 2006)
- Gestion des langues et des sessions en PHP / MySQL
- Nombre moyen de mots par requête : statistiques AOL Août 2006
- Nombre de clics dans les pages de résultats : statistiques AOL Août 2006
- Passage à l'heure d'été/hiver sur un forum phpBB
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Informations sur l'infrastructure technique de Google
- Sortie officielle de GoogleStats v2.0 !
- Google indexe le Flash
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


le forum