mysql表中有一个名为marks的列名。标记就像是43,47,97,30,50等。
我想创建另一个名称为 position 的列。数据应自动添加到该列根据标记。
前:
对于标记97,位置应为1,
对于标记67,位置应为2,
对于标记50,位置应为3,
如何像那样自动填充位置栏?
答案 0 :(得分:0)
当有相同的标记时,可能需要调整。当然,如果您希望自动更新位置,则必须将其置于触发器中。或者,在修改标记表中的数据后立即运行更新:
create table marks
(
id int unsigned not null primary key auto_increment,
mark int not null default 0,
position int not null default 0
);
insert into marks (mark) values (97);
insert into marks (mark) values (67);
insert into marks (mark) values (50);
update marks m
inner join (
select m.id,
@curRank := @curRank + 1 AS rank
from marks m
join (SELECT @curRank := 0) r
order by mark desc
) t on m.id = t.id
set m.position = t.rank
;
select *
from marks;
答案 1 :(得分:0)
假设student
是带有标记和位置列的表,请尝试以下查询:
UPDATE student
JOIN (
SELECT id, IF(@prev <> marks, @s:=@s+1, @s:=@s) AS position, @prev:=marks AS marks
FROM student, (SELECT @s:= 0, @prev:=0) s
ORDER BY marks DESC
) t
ON student.id = t.id
SET student.position = t.position