
| Page 1 | |
| Auteur | Message |
|---|---|
| 1 visiteur sur ce sujet (1 Anonyme) | |
| Page 1 | |
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 ...
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
|
L·P
|
# Posté le 20/01/2007 à 20:01:15 |
![]()
|
Euh... Bien tu viens de comprendre à tes dépends l'utilité des arrays
|
Panzhor
|
# Posté le 20/01/2007 à 20:06:30 |
|
|
Ah ?
Bah je vois pas ce que je peux faire de mieux avec les array
|
Meianki
|
# Posté le 20/01/2007 à 20:09:51 |
|
études : ENSEEIHT |
|
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 ?
|
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 ).
|
Panzhor
|
# Posté le 20/01/2007 à 20:46:00 |
|
|
Bah non ce n'est pas ça, du moins je pense.
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à ...
|
strucky
|
# Posté le 20/01/2007 à 21:10:32 |
Jamais content !![]()
|
Tu vas pas me dire que t'as 210 requêtes
Le tout dans une boucle ? Je comprend pas bien tes LIMIT, ils servent à quoi ? |
Panzhor
|
# Posté le 20/01/2007 à 21:12:48 |
|
|
Euh si j'ai 210 requete XD
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 |
Gaga971
|
# Posté le 20/01/2007 à 21:13:10 |
Programmeur indépendant![]()
|
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
|
anonyme
|
# Posté le 20/01/2007 à 21:29:13 |
|
|
J'a-llu-cine
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_rowsVoir 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 algorythmeC'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é. |
Lynix
|
# Posté le 20/01/2007 à 23:47:26 |
![]()
|
210 requètes O_O c'est ton hébergeur qui doit raler
|
Retour au forum "PHP" ou à la liste des forums
Le Site du Zéro vous proposera bientôt de nouveaux cours partant de Zéro dans d'autres domaines que l'informatique !

