Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql - mettre à jour la colonne de la table à partir d'une autre colonne en fonction de l'ordre

En supposant que id est unique pour chaque ligne, vous pouvez le faire avec des variables :

update <table> t join
       (select t.id, @rn := @rn + 1 as seqnum
        from <table> t cross join (select @rn := 0) vars
        order by old_position
       ) tt
       on tt.id = t.id
    set t.position = tt.seqnum;

Si vous le souhaitez, vous pouvez écrire ceci sans la sous-requête. Le défi consiste à définir la variable. Voici une méthode :

update <table> t
    set t.position = (@rn := coalesce(@rn, 0) + 1)
    order by old_position;

Vous ne pouvez pas initialiser la variable dans une sous-requête car MySQL n'autorise pas les deux join et order by dans une update déclaration.