Titre: Requetes "trop rapides"
Posté par: Guile le le 04-09-2003 a 21:19:52
Salut,
J'ai un problème qui me tracasse énormément, et j'espère que quelqu'un pourra m'orienter pour le résoudre. J'ai un script PHP 4.qui exécute 3 requêtes sur MySQL 4.0.14, suivez bien : //Mise à 1 d'un flag sur 50 enregistrements répondant à un critère A mysql_query($strRequete_1); //Modification des lignes dont le flag est à 1 mysql_query($strRequete_2); //Mise à 0 du flag pour les enregistrements flagés à 1 mysql_query($strRequete_3);
Après chaque lancement de requete, j'affiche le nombre d'enregistrements modifiés. J'obtiens pour la 1ere requete : 5 (soit, sur les 50, il y en a 5 qui répondent au critère A) Pour la 2eme : 0 ! (étonnant, car normalement c'est bon pour les 5) Pour la 3eme: 5 (ah bin ca va!! je reviens comme avant! :-) )
Je comprends pas du tout pourquoi j'ai 0. Mais attendez, y a un autre résultat qui m'étonne. Après l'exécution de la 1ere, je mets un joli sleep(1); (ca endort le script pdt une seconde!) Et bien, là, Ô surprise! J'obtient 5 partout (youpiiiiiii!)
Alors ma théorie, c'est qu'il y a une persistance des données dans MySQL, qui empeche la 2eme requete d'etre réalisée sur les bons enregistrements.
Vous comprendrez bien sur que je ne désire pas garder ce satané sleep(1);
Qqn peut il m'aider, au secouuuuuuurs! :'(
Guile |
Titre: Re:Requetes "trop rapides"
Posté par: Zorf le le 04-09-2003 a 21:47:04
Euh... je comprend pas l'intérêt en fait...
Tu fais: Code:
//Mise à 1 d'un flag sur 50 enregistrements répondant à un critère A mysql_query($strRequete_1); //Modification des lignes dont le flag est à 1 mysql_query($strRequete_2); //Mise à 0 du flag pour les enregistrements flagés à 1 mysql_query($strRequete_3); |
|
Et pourquoi pas: Code:
//Modification des lignes répondant à un critère A mysql_query($strRequete_1); |
|
|
Titre: Re:Requetes "trop rapides"
Posté par: Guile le le 04-09-2003 a 21:54:53
Moui, j'avais oublié de préciser pour ceux qui se pose cette question... La 2eme requete est un update sur plusieurs table (ouai, bourrin, et alors ;) ). Donc on peut pas utiliser LIMIT 50 (car sinon update sur des milliers de lignes, et tps exponentiel) Alors j'ai décidé d'encapsuler le tout dans un "flager / unflager" avec un flager limité à 50 enregistrements...
Voila, est ce une réponse suffisante?
Je continue mon problème qui est résolu, mais ... étrangement dans la requete 2 je mets le flag à 2, et la requete trois a comme critère flag=2 et non plus 1. Vous y croirez peut etre difficilement, mais ca marche... Alors maintenant je voudrais savoir pk ca marche comme ca!!
MySQL est vraiment enigmatique! :)
Guile |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|