:'( rapidité dans une boucle php mysql

Fermé
zepp - 31 mars 2008 à 10:28
 garf - 31 mars 2008 à 12:13
Bonjour tout le monde!

J'ai un jeu en php mysql qui fonctionne au tour par tour. Toutes les 30min je mets donc à jour toutes les ressources de chaque joueur dans des boucles. Le problème réside dans la boucle qui mets à jour le mana. Chaque joueur possède un héros, chaque niveau de héros incrémente de 1 le mana reçus par tour. Le mana et le niveau du héros ne sont pas dans la même table, mais le problème ne dois pas être la (4,6 secondes pour uniquement le select et echo ligne par ligne)... A part contre si je change l'echo avec le vrai update, tout devient trop lent (104 secondes pour updater le mana de 4600 joueurs).

Voici ma boucle:

$request = 'SELECT ress.uid, ress.mana, hero.niveau FROM ress, hero where ress.uid = hero.uid';
$request2 = mysql_query($request);
while($infos = mysql_fetch_assoc($request2)) {
$NewMana = $infos['mana'] + $infos['niveau'];
mysql_query('UPDATE ress SET mana='.$NewMana.' WHERE uid='.$infos['uid']);
}

Y a t'il un moyen d'améliorer cette boucle et la rendre plus rapide?? Un grand merci d'avance, zepp'
A voir également:

2 réponses

Asynchronous_Curling_Team Messages postés 49 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 1 avril 2008 12
31 mars 2008 à 11:57
Tu ne peux pas gérer ce type de données dans ton programme et pas dans une base de données ?
Ce que tu devrais à mon avis faire c'est charger les valeurs depuis la base lors d'un chargement de partie, stoquer ces valeurs dans des variables (de session par exemple), les modifier au cours du jeu, et éventuellement les stoquer dans la base si le joueur décide de sauvegarder sa partie...
Dis moi si je n'ai pas compris le principe de ton jeu...
0
Tout simplement avec un UPDATE SELECT
UPDATE `ress` SET ress.mana=(SELECT heros.niveau FROM heros WHERE herosu.id=ress.uid)+ress.mana
0