Bonjour,
dans le cadre d'un script permettant de décaler les id (PRIMARY KEY) d'une table dans un sens ou dans l'autre, je rencontre un problème qui pourrait peut-être se résoudre en changeant la façon dont la requête est interprétée par le moteur MySQL.

Si je part d'une simple table dont [id] est une clé primaire comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
id	valeur
5	Valeur#1
6	Valeur#2
7	Valeur#3
Je peux sans problème la décaler vers une valeur inférieure en une ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
UPDATE maTable SET id = id - 1
Cela me donne la table suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
id	valeur
4	Valeur#1
5	Valeur#2
6	Valeur#3
Cela fonctionne sans problème car il n'existe pas de collision interne entre les id lors de l’exécution (5 passe à 4, puis 6 passe à 5...)

Par contre, si je souhaite incrémenter l'id de 1 pour obtenir ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
id	valeur
6	Valeur#1
7	Valeur#2
8	Valeur#3
Cela ne fonctionnera pas car en commençant par la première valeur (6), il ne pourra pas lui donner une valeur incrémentée (7) car celle-ci est déjà occupée par la ligne suivante. La requête est interrompue.

L'idée serait de faire travailler cette fonction en partant de la fin vers le début.
J'ai essayé d'utiliser le mot clé DESC en espérant que cela fonctionne sans succès :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
UPDATE maTable SET id = id + 1 DESC
J'ai également tenter de trouver des solutions sur le web sans succès également.

Actuellement, je passe par une boucle en php qui modifie ligne par ligne chacune des valeurs en partant de la fin.
Ça fonctionne, mais ce n'est ni élaguant ni optimisé, donc, si par hasard, vous avez une idée permettant de modifier l'ordre interne d’exécution de MySQL ou même une méthode alternative permettant d’exécuter le tout en une seule ligne, je suis preneur.

Merci d'avoir pris le temps de me lire !