par
Ryle » 09 avr. 2007, 16:40
A mon avis, tu n'as pas besoin de ton update set 'x'. En effet, tu connais l'id de l'enregistrement, il te suffira de le mettre à jour en dernier qu'importe qu'il ait été modifié ou pas, ca te fera toujours gagner un update.
Selon moi la méthode à appliquer est la suivante :
Tout d'abord connaite la position actuelle de l'élément que tu veux déplacer, donc au besoin faire un select pour aller la chercher
$sql = " SELECT position ... FROM ... WHERE ... ";
Puis comparer les positions pour savoir si l'enregistrement monte ou descend :
- lorsque tu déplaces vers le haut (cad que la nouvelle position est supérieur à la position actuelle, ex : de la position 4 vers la 7) il te faut faire un update de tous les élément dont la position est supérieure à 4 et inférieure ou égale à 7 pour leur enlever 1 (cad combler le trou laissé par la position actuelle et libérer la position d'arrivée
- lorsque tu déplaces vers le bas (de 6 vers 1) tu updates tous les enregistrements supérieur ou égaux à 1 et inférieur à 6
if ($positionDepart < $positionArrivee) { // on monte le champ, donc on fait descendre les autres
$sql = "UPDATE .... SET champ = champ - 1 ... "
." WHERE champ > ". $positionDepart
." AND champ <= ". $positionArrivee ;
}
else {// on descend le champ, on monte donc les autres
$sql = "UPDATE .... SET champ = champ + 1 ... "
." WHERE champ < ". $positionDepart
." AND champ >= ". $positionArrivee ;
}
Reste plus qu'à faire l'update du champ que tu veux déplacer en lui spécifiant sa nouvelle position qui aura été libéré ci dessus
$sql = "UPDATE .... SET champ = " . $positionArrivee . " WHERE id = ...";
Queqlues remarques...
- sortir les variables php des chaines
- en sql ne pas mettre d'apostrophes autour des nombres
- n'utilise les ` que pour protéger un champ ou une table dont le nom est un mot clé protégé SQL
- n'utilise pas de mot clé protégé SQL pour nommer tes champs ou tes tables

A mon avis, tu n'as pas besoin de ton update set 'x'. En effet, tu connais l'id de l'enregistrement, il te suffira de le mettre à jour en dernier qu'importe qu'il ait été modifié ou pas, ca te fera toujours gagner un update.
Selon moi la méthode à appliquer est la suivante :
Tout d'abord connaite la position actuelle de l'élément que tu veux déplacer, donc au besoin faire un select pour aller la chercher
[php]$sql = " SELECT position ... FROM ... WHERE ... ";[/php]
Puis comparer les positions pour savoir si l'enregistrement monte ou descend :
- lorsque tu déplaces vers le haut (cad que la nouvelle position est supérieur à la position actuelle, ex : de la position 4 vers la 7) il te faut faire un update de tous les élément dont la position est supérieure à 4 et inférieure ou égale à 7 pour leur enlever 1 (cad combler le trou laissé par la position actuelle et libérer la position d'arrivée
- lorsque tu déplaces vers le bas (de 6 vers 1) tu updates tous les enregistrements supérieur ou égaux à 1 et inférieur à 6
[php]if ($positionDepart < $positionArrivee) { // on monte le champ, donc on fait descendre les autres
$sql = "UPDATE .... SET champ = champ - 1 ... "
." WHERE champ > ". $positionDepart
." AND champ <= ". $positionArrivee ;
}
else {// on descend le champ, on monte donc les autres
$sql = "UPDATE .... SET champ = champ + 1 ... "
." WHERE champ < ". $positionDepart
." AND champ >= ". $positionArrivee ;
}[/php]
Reste plus qu'à faire l'update du champ que tu veux déplacer en lui spécifiant sa nouvelle position qui aura été libéré ci dessus :)
[php] $sql = "UPDATE .... SET champ = " . $positionArrivee . " WHERE id = ..."; [/php]
Queqlues remarques...
- sortir les variables php des chaines
- en sql ne pas mettre d'apostrophes autour des nombres
- n'utilise les ` que pour protéger un champ ou une table dont le nom est un mot clé protégé SQL
- n'utilise pas de mot clé protégé SQL pour nommer tes champs ou tes tables ;)