Как можно обновить несколько строк одним SQL-запросом? (С помощью «order by») - PullRequest
0 голосов
/ 15 октября 2018

У меня есть эта таблица пользователей: (Я хочу обновить рейтинг на основе оценки)

Вот SQL Fiddle:

http://sqlfiddle.com/#!9/2f459d/1/0

Такжеобзор кода:

create table users2 (  
     ranking int ,
     user_id int auto_increment primary key, 
     user_n varchar(70) charset utf8mb4 not null comment 'username',
     score int default '0' null, 
     constraint username  
     unique (user_n)  );

Со значениями:

INSERT INTO users2 (user_id, user_n, score)
value(1,'mohamad',50),
     (2,'john',100),
     (3,'nik',150),
     (4,'sara',200),
     (5,'tom',250);

Я хочу обновить рейтинг на основе оценки.Я могу выбрать, но не могу обновить это:

SELECT c.u_rank,a.user_id,a.user_n,score from users2 a LEFT JOIN (SELECT @s:=@s+1 u_rank,user_id
FROM users2 d,(SELECT @s:=0) as b order by d.score DESC )  AS c
ON a.user_id = c.user_id order by score DESC

Мои усилия на данный момент:

UPDATE users2 a LEFT JOIN (SELECT @s:=@s+1 u_rank,user_id
 FROM users2 ,(SELECT @s:=0) as b ORDER BY score DESC )  AS c
ON a.user_id = c.user_id  SET a.ranking = c.u_rank

1 Ответ

0 голосов
/ 15 октября 2018

В MySQL вы можете сделать это, используя переменные, установив переменную сначала , а затем используя ORDER BY в UPDATE:

SET @s := 0;

UPDATE users2 u
    SET u.ranking = (@s := @s + 1)
    ORDER BY score DESC ;

Здесь это скрипка SQL.

...