Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

Mysql :requete lourde comment alleger...

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
clemumm
Nouveau WRInaute

Inscrit le: 03 Déc 2007
Messages: 18

URL permanente de ce messagePosté le : Dim Fév 03, 2008 20:29    Sujet du message: 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
 
clemumm Visiter le site web du posteur
FlorentP
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 25 Juin 2005
Messages: 145

URL permanente de ce messagePosté le : Dim Fév 03, 2008 21:12    Sujet du message: Mysql :requete lourde comment alleger...

C'est quoi tes requetes et le schéma de tes tables ?
 
FlorentP Visiter le site web du posteur
clemumm
Nouveau WRInaute

Inscrit le: 03 Déc 2007
Messages: 18

URL permanente de ce messagePosté le : Dim Fév 03, 2008 21:40    Sujet du message: Mysql :requete lourde comment alleger...

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:

//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:
$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.
 
clemumm Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

Autres sujets de discussion :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort