Swap entre deux colonnes pour 2 enregistrements
Bonjour,
Voici un apperçu de ma table :
Code:
1 2 3 4 5 6 7
|
ID User Order
------------------------
1 1 3
2 4 4
3 3 1
4 2 2 |
Dans une page web, j'ai une liste d'items ayant chacun deux petites images permettant de les ré-ordonner. Autrement dit un UP/DOWN. Si l'utilisateur clique sur UP pour un item, je dois décrémenter son Order de -1 et incrémenter l'item au-dessus de lui de +1. Comme indice j'ai le ID de l'item à incrémenter. Similaire pour le DOWN mais en inversé bien sur.
Alors ma question c'est : Est-ce que c'est possible de faire ce traitement en UNE seule requête (sans stored proc).
Merci.
Re: Swap entre deux colonnes pour 2 enregistrements
Oui, c'est possible.
Pour le UP:
Code:
1 2 3
| UPDATE table
SET Order=IF(Order=$num, Order-1, Order+1)
WHERE Order=$num OR Order=$num-1 |
Pour le DOWN:
Code:
1 2 3
| UPDATE table
SET Order=IF(Order=$num, Order+1, Order-1)
WHERE Order=$num OR Order=$num+1 |
On en déduit une formule générale, avec un $delta tel que:
- pour UP: $delta=1
- pour DOWN: $delta=-1 :
Code:
1 2 3
| UPDATE table
SET Order=IF(Order=$num, Order-$delta, Order+$delta)
WHERE Order=$num OR Order=$num-$delta |
... comme ça, ça évite d'écrire deux fois la même requête (on change juste le $delta).