Eviter des milliers de UPDATE
24 messages
• Page 1 sur 2 • 1, 2
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
Eviter des milliers de UPDATE
Bonjour tout le monde,,
Alors voilà j'aurais un petit problème, en fait je désire faire un classement de joueurs.
Ceux-ci sont tout d'abord classés selon leur nombre de points en ORDER BY points DESC. J'ai donc la position de ceux-ci dans un tableau. Mon problème est que je dois "updater" le champ "ranking" de chacun des membres.
Ce que je n'arrive pas à faire c'est une requète unique qui pourrait "updater" tous les ranking en une fois. C'est à dire quelque chose qui éviterait ca :
Ce qui ferait des milliers de requêtes avec tous les membres !
Merci d'avance
Alors voilà j'aurais un petit problème, en fait je désire faire un classement de joueurs.
Ceux-ci sont tout d'abord classés selon leur nombre de points en ORDER BY points DESC. J'ai donc la position de ceux-ci dans un tableau. Mon problème est que je dois "updater" le champ "ranking" de chacun des membres.
Ce que je n'arrive pas à faire c'est une requète unique qui pourrait "updater" tous les ranking en une fois. C'est à dire quelque chose qui éviterait ca :
- Code: Tout sélectionner
<?php
foreach($classement as $membre => $ranking) {
mysql_query('UPDATE membres SET ranking = "'.$ranking.'" WHERE login = "'.$membre.'"');
}
?>
Ce qui ferait des milliers de requêtes avec tous les membres !
Merci d'avance
Dernière édition par mowmow le Lun Sep 19, 2005 18:24, édité 2 fois.
- spidetra
- WRInaute passionné

- Messages: 1500
- Inscription: 7 Juil 2003
fredsoft a écrit:je crois que vous n'avez pas d'autre solution...dans tous les cas si la base est bien faite c'est pas forcéement lent.une base de données est faite pour ça
pensez à indexer le champ login
En règle générale il faut éviter de faire des requêtes dans des boucles.
Pour ma part c'est devenu une règle de base :
Jamais de requêtes dans une boucle.
mowmow, Est-ce que tu peux nous poster la structure de tes tables, cela nous aidera à trouver la requête qui va bien.
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
En fait après avoir classé les membres selon leur nombre de points, j'update leur position dans le champ ranking dans la meme table.
Ca m'a l'air intéressant, comment je pourrais faire en sorte que ca fasse comme je le voudrais ? Parce que je ne connais pas trop cette syntaxe
nodom a écrit:il faut faire de sorte que la formule de calcul soit dans la requête unique:
UPDATE membres SET ranking =
(select fromule from tables
WHERE .... and table1.login=memebres.login)
Ca m'a l'air intéressant, comment je pourrais faire en sorte que ca fasse comme je le voudrais ? Parce que je ne connais pas trop cette syntaxe
-

MarvinLeRouge - WRInaute impliqué

- Messages: 525
- Inscription: 1 Sep 2004
Il faudrait déjà que ton serveur fasse tourner une version mysql qui admet les sous-requètes, ce qui me parait compromis sur un serveur de prod.
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
nodom a écrit:mowmow
comment vous faites pour classer les membres? l'idée d'integrer la méthode de classement dans la requête si c'est possible.
SELECT 1 FROM membres ORDER BY points DESC
Pour les sous requêtes ca devrait pas être un problème j'ai un dédié
-

MarvinLeRouge - WRInaute impliqué

- Messages: 525
- Inscription: 1 Sep 2004
mowmow a écrit:nodom a écrit:mowmow
comment vous faites pour classer les membres? l'idée d'integrer la méthode de classement dans la requête si c'est possible.
SELECT 1 FROM membres ORDER BY points DESC
Pour les sous requêtes ca devrait pas être un problème j'ai un dédié
OK. Donne le nom des tables et leur structure stp.
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
Lol ok c'est tout simple
===================
STRUCTURE TABLE MEMBRES
===================
- login
- ranking
- points
Requête : SELECT login FROM membres ORDER BY points DESC
PHP :
Et après je voudrais updater tous les "ranking" des membres avec la clé de array qui représente leur position.
Voilà voilà, je voudrais savoir si c'est possible en une seule requête.
Désolé de pas avoir été assez clair ...[/code]
===================
STRUCTURE TABLE MEMBRES
===================
- login
- ranking
- points
Requête : SELECT login FROM membres ORDER BY points DESC
PHP :
- Code: Tout sélectionner
while($row = mysql_fetch_assoc($sql))
$array[] = $row['login'];
Et après je voudrais updater tous les "ranking" des membres avec la clé de array qui représente leur position.
Voilà voilà, je voudrais savoir si c'est possible en une seule requête.
Désolé de pas avoir été assez clair ...[/code]
- nodom
- WRInaute occasionnel

- Messages: 316
- Inscription: 15 Jan 2005
c'est un peut compliqué mais pas impossible. mais je pense que vous pouvez faire autrement. enfin pour vous le rank c'est la position du memebre en fonction des points
faites ça alors
update membres set rank=f(points)
à la place de f(points) imaginez une fonction.
qui donne des valeurs qui vont le mieux avec votre besoins.
exemple: des valeurs de 0 à 1
"update membres set rank=points/".$max;
$max le nombre de points le plus grand
calculé ave select max(points) from membres
...
faites ça alors
update membres set rank=f(points)
à la place de f(points) imaginez une fonction.
qui donne des valeurs qui vont le mieux avec votre besoins.
exemple: des valeurs de 0 à 1
"update membres set rank=points/".$max;
$max le nombre de points le plus grand
calculé ave select max(points) from membres
...
24 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Backlinks par milliers....
- indexation de milliers de pages
- Des milliers de sites inaccessibles !
- erreurs apache par milliers
- Adsense des milliers de dollars
- plusieurs centaines de milliers à indexer
- Similitude >90% entre plusieurs milliers de pages
- Des milliers de backlinks variés = le Graal?
- soumettre un site avec des milliers de pages
- Pénalités Indexation milliers de page d'un coup ?
- Google prévoit de recruter plusieurs milliers d'ingénieurs
- Générer des milliers d'annonces pour AdWords
- Adsense peut il bloquer des milliers de sites !
- Annonces ciblées pour des milliers de produits
- Google refuse d'indexer mes milliers de noms ?
Consultez la description détaillée des produits ou services de Google suivants : Google Catalogs
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

