Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: Guile le le 04-09-2003 a 21:19:52

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.