Aller au menu - Aller au contenu

( Longue ) Fonction qui ralenti mes pages

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne Panzhor # Posté le 20/01/2007 à 19:56:42

Bonjour à tous,

Bon voilà, je tiens un site de jeux en ligne, et dedans, j'y est intégrer un championnat.
Donc en fonction de son score à tel jeu, ( c'est à dire une sorte de classement ), on obtient des points !

Le problème est le suivant :

Cette ( longue ) fonction fait donc 2500 lignes. C'est beaucoup :-°
Vous vous demandez ce qu'il peut y avoir dedans ?
Bah c'est simple :
A chaque jeu ( Il y en a 10 ), et bien on fait une requete ou on prend le 1er, le 2e, 3e ... jusqu'au 20e, et on leur redistribue des points.

A la fin on arrive à ce calcul :

Code : PHP

$totalfinal =(
$total1 + $total2 + $total3 + $total4 + $total5 + $total6 + $total7 + $total8 + $total9 + $total10 +
$total11 + $total12 + $total13 + $total14 + $total15 + $total16 + $total17 + $total18 + $total19 + $total20 +
$total21 + $total22 + $total23 + $total24 + $total25 + $total26 + $total27 + $total28 + $total29 + $total30 +
$total31 + $total32 + $total33 + $total34 + $total35 + $total36 + $total37 + $total38 + $total39 + $total40 +
$total41 + $total42 + $total43 + $total44 + $total45 + $total46 + $total47 + $total48 + $total49 + $total50 +
$total51 + $total52 + $total53 + $total54 + $total55 + $total56 + $total57 + $total58 + $total59 + $total60 +
$total61 + $total62 + $total63 + $total64 + $total65 + $total66 + $total67 + $total68 + $total69 + $total70 +
$total71 + $total72 + $total73 + $total74 + $total75 + $total76 + $total77 + $total78 + $total79 + $total80 +
$total81 + $total82 + $total83 + $total84 + $total85 + $total86 + $total87 + $total88 + $total89 + $total90 +
$total91 + $total92 + $total93 + $total94 + $total95 + $total96 + $total97 + $total98 + $total99 + $total100 +
$total101 + $total102 + $total103 + $total104 + $total105 + $total106 + $total107 + $total108 + $total109 + $total110 +
$total121 + $total122 + $total123 + $total124 + $total125 + $total126 + $total127 + $total128 + $total129 + $total130 +
$total131 + $total132 + $total133 + $total134 + $total135 + $total136 + $total137 + $total138 + $total139 + $total140 +
$total141 + $total142 + $total143 + $total144 + $total145 + $total146 + $total147 + $total148 + $total149 + $total150 +
$total151 + $total152 + $total153 + $total154 + $total155 + $total156 + $total157 + $total158 + $total159 + $total160 +
$total161 + $total162 + $total163 + $total164 + $total165 + $total166 + $total167 + $total168 + $total169 + $total170 +
$total171 + $total172 + $total173 + $total174 + $total175 + $total176 + $total177 + $total178 + $total179 + $total180 +
$total181 + $total182 + $total183 + $total184 + $total185 + $total186 + $total187 + $total188 + $total189 + $total190 +
$total191 + $total192 + $total193 + $total194 + $total195 + $total196 + $total197 + $total198 + $total199 + $total200 +
$total201 + $total202 + $total203 + $total204 + $total205 + $total206 + $total207 + $total208 + $total209 + $total210);


Et bien ca fait beaucoup tout ça ... :p

Ce pourquoi je vous demande votre aide, pour savoir si vous avez une idée ou pas ...
Peut-être procédé autrement ?

Merci en tout cas :)
 
Hors ligne L·P # Posté le 20/01/2007 à 20:01:15
Avatar
Modérateurs

Euh... Bien tu viens de comprendre à tes dépends l'utilité des arrays :D

Serveur Personnel : leo-server.
Productions en : PHP, C++, Ti-Basic, photographiques.
 
Hors ligne Panzhor # Posté le 20/01/2007 à 20:06:30

Ah ?
Bah je vois pas ce que je peux faire de mieux avec les array ^^
 
Hors ligne Meianki # Posté le 20/01/2007 à 20:09:51

études : ENSEEIHT

Code : PHP
for($i=1,$i<211,$i++){
$total += $truc[$i];
}


Voilà ce que tu peux faire entre autre... :-°
Quoi qu'une fonction spécial existe probablement ^^
Édité le 20/01/2007 à 20:10:32 par Meianki

Moi je suis une brêêêêle en PHP/SQL alors je vais et .
 
Hors ligne Panzhor # Posté le 20/01/2007 à 20:34:25

Merci pour vos réponses :)
Mais franchement je sais pas à quoi ca pourrait me servir ca ? :-°
 
Hors ligne anonyme # Posté le 20/01/2007 à 20:42:47

T'es sur que c'est juste ce calcul qui fait ralentir l'execution de tes pages ? Additionner plus de 200 chiffres ça l'ordi te le fait en moins de 0,001 sec ( je suis prêt à parier ).
Hors ligne Panzhor # Posté le 20/01/2007 à 20:46:00

Bah non ce n'est pas ça, du moins je pense. :euh:

C'est l'enchainement des requete SQL ...

Regardez rien que pour un jeu :

Code : PHP

$sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 0,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total91 = 200;
}
else
$total91 = 0;

// now le 2

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 1,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total92 = 190;
}
else
$total92 = 0;

// now le 3

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 2,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total93 = 180;
}
else
$total93 = 0;

// now le 4

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 3,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total94 = 170;
}
else
$total94 = 0;

// now le 5

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 4,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total95 = 160;
}
else
$total95 = 0;

// now le 6

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 5,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total96 = 150;
}
else
$total96 = 0;

// now le 7

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 6,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total97 = 140;
}
else
$total97 = 0;

// now le 8

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 7,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total98 = 130;
}
else
$total98 = 0;

//now le 9

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 8,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total99 = 120;
}
else
$total99 = 0;

// now le 10

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 9,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total100 = 110;
}
else
$total100 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 10,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total201 = 100;
}
else
$total201 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 11,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total202 = 90;
}
else
$total202 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 12,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total203 = 80;
}
else
$total203 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 13,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total204 = 70;
}
else
$total204 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 14,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total205 = 60;
}
else
$total205 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 15,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total206 = 50;
}
else
$total206 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 16,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total207 = 40;
}
else
$total207 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 17,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total208 = 30;
}
else
$total208 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 18,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total209 = 20;
}
else
$total209 = 0;

        $sql = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC LIMIT 19,1")or die(mysql_error());
$uy = mysql_fetch_array($sql);
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'")  or die(mysql_error());
$e = mysql_fetch_array($retour);
if ($e['nbre_entrees'] == 1)
{
$total210 = 10;
}
else
$total210 = 0;


Mais je sais pas comment je pourrais faire autrement là ... :-°
 
Hors ligne strucky # Posté le 20/01/2007 à 21:10:32
Jamais content !
Avatar

Tu vas pas me dire que t'as 210 requêtes :D

Le tout dans une boucle ?

Je comprend pas bien tes LIMIT, ils servent à quoi ?
Hors ligne Panzhor # Posté le 20/01/2007 à 21:12:48

Euh si j'ai 210 requete XD :D

Bah oui je suis obligé, les LIMIT c'est pour séléctionner le 1er score, donc il aura 200 points.
Le 2e score, il aura donc 190 points ...
Etc ...
Mais je fais 210 requete y'a pas de while
 
Hors ligne Gaga971 # Posté le 20/01/2007 à 21:13:10
Programmeur indépendant
Avatar

Mdr je pense que si justement , ca fait beaucoup, quand tu te lances dans ce genre de script il faut reflechir avant de se lancer mon ami lool ;)


 
Hors ligne anonyme # Posté le 20/01/2007 à 21:29:13

J'a-llu-cine :waw:

Non pas parce que c'est "mal codé" ( enfin ça veut rien dire mais c'est pas pratique en fait ce que t'as fait ) mais parce que t'as du passer un max de temps à tout taper à la main ! Bon j'ai plusieurs astuces à te donner.

mysql_num_rows



Voir la doc

Bon moi je vais t'expliquer ça à ma sauce.
Code : PHP
mysql_num_rows permet de compter les requêtes de $query ( le nombre de résultats que contient $query )

Exemple :
Code : PHP
$retour = mysql_query('SELECT * FROM table WHERE truc = "machin"') or die(mysql_error());
$nombre_entrees = mysql_num_rows($retour);


A quoi ça sert ?


Bah en fait toi tu as multiplié le nombre de requêtes que tu as fait par 2 à cause de ce genre de trucs :
Code : SQL
SELECT COUNT(id) AS nbre_entrees FROM TABLE ...

Maintenant tu as plus qu'a réutiliser ta requête d'avant en la passant dans mysql_num_rows.

Un algorythme



C'est quoi ?


Un algorythme c'est juste une série de calculs répétitifs qui vont être effectués jusqu'à arriver à un calcul voulu. On va donc utiliser une boucle ( en programmation ).

Comment le trouver ?


Bon c'est pas tout de savoir ce que c'est un algorythme mais il faut aussi savoir le trouver dans une série de calculs ou d'action répétitives. Dans ton cas tu fais plein de requêtes identiques, sauf que tu prends juste un identifiant différent à chaque fois. Il te suffit de prendre en une seule requête toutes les données de la table et de faire une boucle qui passera par chaque entrée et qui fera l'agorythme que tu veux. On passe déjà de environ 30 requêtes ( ou plus ) à 1.

Ensuite j'ai vu que tu attribuais un $total[id_entree] qui part de 200 et qui diminue de 10 à chaque entrée. C'est tout con, à chaque passage de la boucle on diminue de 10 une variable.
Et pour retrouver chaque variable $total, je fais comment ?

Bah on prend des tableaux, ça sera plus simple. Bon je t'ai juste expliqué comment on fonctionnerais, maintenant je te montre ce que ça donne chez moi ( pas sûr que ça marche ).
Code : PHP
$entrees = mysql_query("SELECT * FROM scores WHERE id_jeu='15' ORDER BY score DESC") or die(mysql_error());

$total = array();
$score = 200;
$boucle = 0;

while($donnees = mysql_fetch_array($entrees))
{
        # On inscrit le score dans le tableau $total[$id_du_membre]
        $total[$boucle] = $score;       
       
        $score -= 10;
        $boucle++;
       
        # Si score est plus petit que 0 alors on sort de la boucle
        if($score < 0)
        {
        break;
        }
}

Bon c'est pas sûr que ça marche et j'ai pas toutes les données nécessaires pour savoir si tout est exact. J'ai pensé que faire ceci était inutile puisque c'est obligé que la condition soit vraie.
Code : PHP
$retour = mysql_query("SELECT COUNT(pseudo) AS nbre_entrees FROM scores WHERE pseudo='".$donnees['pseudo']."' AND id_jeu='15' AND score='".$uy['score']."'") or die(mysql_error());
$e = mysql_fetch_array($retour);

if ($e['nbre_entrees'] == 1)

Je l'ai donc enlevé.
Hors ligne Lynix # Posté le 20/01/2007 à 23:47:26
Avatar

210 requètes O_O c'est ton hébergeur qui doit raler
 

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx