Eviter des milliers de UPDATE
24 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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.
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.
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: 451
- Inscription: Mer Sep 01, 2004 20:10
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.
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: 451
- Inscription: Mer Sep 01, 2004 20:10
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.
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]
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Passage à l'heure d'été/hiver sur un forum phpBB
- Google Update Jagger : étape 2 sur 3
- Historique des "Google Update"
- Des changements dans l'algorithme de Google ? (22 février 2007)
- La mise à jour du mois de juillet arrive...
- La Google Dance Gilligan n'en était pas une
- API Blogger : Google Data API
- Google Dance : c'est parti ! Update de juillet 2002
- La mise à jour BigDaddy se poursuit...
- La Google Dance : description...
- 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





le forum