Page 1 sur 1

Probleme avec requete update

Posté : 09 avr. 2009, 13:47
par consequences
alors voila la requete qui marche pas :

Code : Tout sélectionner

$reqJourFerie="SELECT IdTestJourFerie, DateTimeTestJourFerie, LibTestJourFerie, IdJour, IdMois, IdAnnee FROM testjourferie"; $rsReqJourFerie=mysql_query($reqJourFerie); while ($rowReqJourFerie=mysql_fetch_array($rsReqJourFerie)){ $dateFerie=$rowReqJourFerie['DateTimeTestJourFerie']; $separeEnvoi=split("[- :]", $dateFerie); $anneeFerie=$separeEnvoi[0]; $moisFerie=$separeEnvoi[1]; $jourFerie=$separeEnvoi[2]; if ($anneeFerie!=$annee){ if ($rowReqJourFerie['IdTestJourFerie']==2 or $rowReqJourFerie['IdTestJourFerie']==5){ echo("1"); mysql_query("UPDATE testjourferie SET DateTimeTestJourFerie='".$annee."-00-00 00:00:00',IdJour='0', IdMois='0', IdAnnee='".$annee."' "); }else{ echo("2"); mysql_query("UPDATE testjourferie SET DateTimeTestJourFerie='".$annee."-".$moisFerie."-".$jourFerie." 00:00:00', IdAnnee='".$annee."' "); } } }

(2010 est lexemple pour une nouvelle annee en fait)

En gros si elle fonctionnait elle devrait me quand elle update differencier l'id 2 et l'id5
quand c'est eux mon datetimedevrait resembler a 2010-00-00 00:00:00 et modifier
aussi idjour a 0 idmois a 0 et id annee a 2010
et quand c'est les autre id devrais avoir 2010-01-01 00:00:00 et seulement modifier
l'idannee a 2010

et moi ma requete donne en fait quelle :
mets a 0 tous les idjour et idmois de tout les idjourferie
mets a jour donc ca ca va tous les idannee de tout les idjour ferie
et le datetimejourferie est quand la lui le meme pour tout les idjour ferie
avec donnee du dernier idjourferie
ce que veux dire que si dernier idjour ferie est idjourferie1 ou 5
alors tout mes datetime auront 2010-00-00 00:00:00
et si c etait un autre idjourferie par exemple le 25 decembre
alors tout mes datetime aurait 2010-12-25 00:00:00

Posté : 09 avr. 2009, 14:24
par Ryle
Je n'ai, mais alors rigoureusement, rien compris à tes explications :shock:
Tu es soumis à une taxe sur les points et les virgules ? ;)

D'après ce que j'ai pu déchiffrer, je dirais que ton problème vient du fait que dans ton update, tu n'as pas de condition WHERE. Du coup à chaque requête exécutée, c'est toute la base qui est mit à jour et pas seulement l'enregistrement courrant...

Posté : 09 avr. 2009, 14:45
par consequences
oui lol desole pour la ponctuation.
En fait je sais pas si j'ai vraiment besoin d'un WHERE car au vue de mes conditions tout est dedans.
Le probleme c'est que en fait au moment de l'update tout les champs sont mise a jour par
les données du derniere idJourFerie et ce sur tout les IdJourFerie et pour le coup sans tenir
compte des conditions

Posté : 09 avr. 2009, 14:53
par Ryle
Ben en fait, si tu ne met pas de where dans ta requête, MySQL va jouer ton update sur chaque enregistrement.

En gros, pour la première date, il va mettre à jour toute la table. Puis pour la deuxième date, il va remettre à jour toute la table etc. jusqu'à la dernière date avec laquelle il remettra à jour toute la table.
Résultat, à la fin de ta boucle, ta table contient la dernière valeur partout.

D'où l'importance de mettre un critère dans ton update pour lui dire de ne mettre à jour que l'enregistrement de la date sur laquelle tu es et pas de toute la table...

Posté : 09 avr. 2009, 15:44
par consequences
Ben en fait, si tu ne met pas de where dans ta requête, MySQL va jouer ton update sur chaque enregistrement.

En gros, pour la première date, il va mettre à jour toute la table. Puis pour la deuxième date, il va remettre à jour toute la table etc. jusqu'à la dernière date avec laquelle il remettra à jour toute la table.
Résultat, à la fin de ta boucle, ta table contient la dernière valeur partout.

D'où l'importance de mettre un critère dans ton update pour lui dire de ne mettre à jour que l'enregistrement de la date sur laquelle tu es et pas de toute la table...


okay merci donc en fait je rajoute un WHERE IdJourFerie=2 and IdJourFerie=5 alors si j'ai bien compris

merci merci ;)


pour le coup mon update donne ca :

Code : Tout sélectionner

mysql_query("UPDATE testjourferie SET DateTimeTestJourFerie='".$annee."-00-00 00:00:00',IdJour='0', IdMois='0', IdAnnee='".$annee."' WHERE ".$rowReqJourFerie['IdTestJourFerie']."='2' AND ".$rowReqJourFerie['IdTestJourFerie']."='5' ");
mais elle ne fonctionne pas du tout

Posté : 09 avr. 2009, 16:08
par Ryle
Euh.... disons que ta variable $rowReqJourFerie['IdTestJourFerie'] va difficilement pouvoir être égale à 2 et à 5 en même temps... ;)

Ce n'est pas ta variable qu'il faut tester, mais l'identifiant de ton enregistrement dans ta table...
"WHERE IdTestJourFerie = " . $rowReqJourFerie['IdTestJourFerie']
:arrow: mettra à jour les enregistrements pour lesquelles la valeur de IdTestJourFerie en base sera égale au $rowReqJourFerie['IdTestJourFerie'] courrant.
Ce qui te permettra de mettre à jour ton enregistrement, quelque soit son id.

Posté : 09 avr. 2009, 16:17
par consequences
ah oui exact quel con je fais lol vivement le soir que jaille au lit

en tout cas encore merci

bon v fermer le sujet je pense lol. A mais quel con quand meme...

merci et a une prochaine sans doute ;)

bonne soiree