Requêtes multiples [PHP/MYSQL] - PHP - Programmation
Marsh Posté le 10-10-2011 à 17:45:34
Il fait quoi, ton rang? Il ordonne juste en fonction du score? Si oui, ça doit pouvoir se faire d'un coup, non?
Une connerie de ce style?
Code :
|
Marsh Posté le 10-10-2011 à 17:52:33
Oui mon rang ordonne simplement en fonction du score.
C'est vrai que je peux peut être le faire avec une seule requête. Je crains un peu la complexité du calcul cependant, parce qu'on travaille sur une table comportant plusieurs millions d'enregistrements ...
Enfin en tout état de cause je récupère un You can't specify target table 't1' for update in FROM clause
Marsh Posté le 10-10-2011 à 18:02:14
nisalon_caje a écrit : Oui mon rang ordonne simplement en fonction du score. C'est vrai que je peux peut être le faire avec une seule requête. Je crains un peu la complexité du calcul cependant, parce qu'on travaille sur une table comportant plusieurs millions d'enregistrements ... |
Bof, c'est pas bien lourd de faire un count()...pour peu qu'il y ait un index sur ta colonne score ça doit pouvoir rouler.
nisalon_caje a écrit : Enfin en tout état de cause je récupère un You can't specify target table 't1' for update in FROM clause |
Message d'erreur surprenant...m'enfin je connais pas bien mysql.
Ca a l'air connu comme problème, avec un workaround bien laid: http://www.xaprb.com/blog/2006/06/ [...] -in-mysql/
Marsh Posté le 10-10-2011 à 18:32:21
ok je vais lire ça.
Mais serait-il néanmoins possible de faire avec la méthode que je souhaitais au début (c'est à dire deux requêtes, et que les variables ne soient pas "perdues" entre les deux requêtes).
(non que je sois têtu, si votre solution marche en un temps acceptable, je l'utiliserai ; mais par curiosité j'aimearis savoir comment éviter que mes variables ne disparaissent le temps de quelques requêtes)
Marsh Posté le 10-10-2011 à 19:01:35
en fait j'avais oublié une contrainte
les scores sont tels qu'il n'y a que très peu d'égalité entre les scores... (nombres décimaux sur [0;1 000 000])
Aussi, il est difficile d'avoir un index efficace (car chaque "groupement" a une taille de 1 grosso modo)
(d'ailleurs étrangement j'ai refait la requête que vosu avez indiqué et elle décide de fonctionner maintenant ...)
Marsh Posté le 11-10-2011 à 15:36:22
Solution pour faire des requêtes sql multiples : http://www.manuelphp.com/php/funct [...] -query.php
Marsh Posté le 11-10-2011 à 16:05:46
ok merci, je vais regarder ça.
Mais je vois que cela utilise des fonctions "mysqli"
Dois-je établir une seconde connexion à ma base de données, sachant que pour le moment je m'y suis connecté par la fonction mysql_connect ?
Marsh Posté le 11-10-2011 à 16:22:04
Si c'est pas trop long, tu passes tout en mysqli.
Marsh Posté le 11-10-2011 à 16:37:02
ReplyMarsh Posté le 12-10-2011 à 09:01:40
c'est une autre lib permettant de se connecter à une BD mysql et fait des choses en plus que la lib de base ne fait pas...
Marsh Posté le 10-10-2011 à 16:41:56
Bonjour,
J'ai le problème suivant : j'ai une table contenant des données, un score, une colonne rang
Cette table étant écrite très peu souvent, je fais un calcul du rang de manière statique (ce qui me permet également, d'avoir un rang "global", malgré des filtrages éventuels sur ma requête).
Bref, le problème n'est pas là, puisque je réussis à faire cette requête parfaitement ... dans phpmyadmin
Le problème vient alors du passage en php
En effet, ma requête est en fait une requete double :
tout d'abord j'initialise mes variables :
Puis je fais ma deuxième requête qui est la requête de mise à jour à proprement parler.
Bon le problème c'est que comme c'est une requête multiple, je fais ça en deux fois dans php (j'appelle deux fois mysql_query, une fois pour chaque requête).
Et lorsque je lance ma seconde requête, il fait comme si je n'avais jamais fait la première, ce qui est relativement embêtant
Bref, sauriez vous comment résoudre le problème ?
Je pensais aller jeter un coup d'oeil du côté des transactions, mais il me semble que c'est à utiliser que lorsque l'on a deux "vraies" requêtes à faire (et je n'ai aucune idée quant à savoir si ca changerait mon problème avec php)
Merci d'avance !