Tilix
Messages postés171Date d'inscriptionsamedi 4 décembre 2004StatutMembreDernière intervention31 août 2009
-
19 févr. 2006 à 03:04
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
22 févr. 2006 à 19:46
Bonsoir à tous,
Voilà mon problème. J'ai des longues boucles WHILE à effectué (+ de
3000 entrées) et malheureusement, quand je charge la page qui possède
cette boucle, elle n'arrive jamais jusqu'au bout (pas mal d'action à
faire pour chaque tour tout de même > 1 dixaine de requete sql...). La page s'arrête de se
charger et ne fini pas la boucle.
Je voudrais savoir comment faire pour que celle-ci soit
entièrement réalisé, et avec encore plus d'entrées aussi. (celà
viendrait-il de l'hebergeur ?)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 févr. 2006 à 07:56
Antho => oh ça va lol, tu sais rès bien ce que je veux dire ;-)
Tilix => Vas donc sur la page des "auteurs de sources" par exemple.
Il y a des tonnes de pas sur ce site qui ramène très probablement plus d'infos que celle de ton site, que tu incrimines, là. (c'est une question de logique, ce site comptant environ 200 fois plus de membres que le tien).
Je ne comprends pas pourquoi tu n'essayes pas de montrer quelques unes de tes requêtes. Je suis persuadé que le problème vient de là. Perso, il y a peu, j'avais ujne requête qui allait construire une liste de 2700 emplacements en allant chercher les infos dans une dizaine de tables aussi. Je ramenais le tout en une seule requête, déjà (donc 2700 requêtes pour les 2700 lignes construites), mais cela prenait une 10aine de secondes. Je trouvais ça beaucoup trop long, alors j'ai simplement descendu des infos pour réduire les tables sur lesquelles aller requêter. Je suis descendu à 2 secondes. Si j'y ajoute un système de pagination, c'est reglé, avoir accès à n'importe laquelle de ces lignes prendra qques micro secondes.
Les lenteurs sql sont souvent dûes à de mauvaises requêtes, ou une mauvaise structure de bdd (pour des bdd de taille raisonnable hein).
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 20 févr. 2006 à 13:04
Bon, désolé pour ces deux précédents posts... les anciennes versions de Mozilla ne gèrent pas du tout ce wysiwyg...
En MYSQL 5, tu peux faire une procédure, ce qui ne te fera qu'une requette et sera bien plus rapide que ton programme C du fait du transfert entre php et SQL qui sera moindre...
//On fait une boucle de tous les types de bâtiments que possèdes le
membre, et on enleve les bâtiments qui ne font pas gagner d'argent (5
tours maxi)
//En fonction du bâtiment, le membre augmente le total de ses gains.
$select_batiment = "SELECT * FROM TableDesBatiments WHERE
Ville='".$recupere_membre['id']."' AND Type != 'Amenagement' AND Type
!= 'Religieux' AND Type != 'Services' AND Type != 'Education'";
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 févr. 2006 à 20:35
C'est déjà bien crade, tu peux tenter ça (pas besoin de la requête du haut apparemment) :
$TotalDesGains = 0;
$select_batiment = "SELECT b.Ville,b.Nombre,b.Batiment,m.Loyer,m.Habitants,Nombre FROM TableDesBatiments b,TableMaison m WHERE b.Type='Maison' AND m.id=b.Batiment";
$envoi_batiment = mysql_query($select_batiment);
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 févr. 2006 à 22:15
bah là y'a une seule requête et un seul update, mais j'aimerais savoir ce qu'il met à jour avant de transformer ça, car je crains qu'il n'y ait une boucle pour faire les updates par contre...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 21 févr. 2006 à 09:11
Ce sont aussi des alias, et ça sert ç différencier le noms des champs quand on a les mêmes noms dans plusieurs tables différentes. Dans le cas de clefs étrangères, essentiellement.
Et tu peux très bien l'utiliser, oui.
Il y a autre chose, la structure de ta base est visiblement mauvaise...
Les types de bâtiments devraient faire l'objet d'une autre table, avec un id, et tu ne devrais utiliser que cet id dans ta table TableDesBatiments, cela allègerait le code (WHERE Type NOT IN (id1, id2, id3...). Il est toujours plus léger de jouer avec des entiers qu'avec des chaînes.
De plus, je ne pense pas qu'il soit utile, au vu de ton code, de vérifier le type de bâtiment dans chaque requête. Visiblement, après, tu ne fais qu'une mise à jour d'une variable...
SELECT b.Ville,b.Nombre,b.Batiment,m.Loyer,m.Habitants,Nombre FROM TableDesBatiments b,TableMaison m WHERE m.id=b.Batiment
while (blabla)
if batiment === maison alors...
if batiment === hutte alors....
if batiment === trucmuche alors...
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 21 févr. 2006 à 20:59
dans sa boucle y'a que un seul if bref je l'ai inclus dans la requête pour faire sauter la condition personnellement. Sinon nous on aimerait bien que tu nous files ta requête UPDATE que tu fais... concernant l'aide des alias tu peux rechercher sur google le manuel est je pense assez explicite.