#1221 - Incorrect usage of UPDATE and ORDER BY

后端 未结 2 1818
名媛妹妹
名媛妹妹 2021-01-05 22:41

To bypass a problem I posted in a other thread. I tried an sql statement like this:

UPDATE user u JOIN (SELECT @i := 0) r
SET user_rank_planets = (@i := (@i          


        
2条回答
  •  挽巷
    挽巷 (楼主)
    2021-01-05 23:06

    The @1000111's answer doesn't work. I don't know the reason but MySQL just ignored the ORDER BY in the subquery and updated with the default order (by the Primary_key). A silly solution is wrapping the subquery inside another subquery to create a temporary table.

    UPDATE user u 
    INNER JOIN 
    (
        SELECT * FROM (
            SELECT *, (@i := (@i + 1)) AS row_number
            FROM user u 
            CROSS JOIN (SELECT @i := 0) r
            WHERE user_active=1
            ORDER BY user_planets DESC
        ) AS t1
    ) AS t
    ON u. = t.
    SET u.user_rank_planets = t.row_number
    

提交回复
热议问题