-- 定时任务创建
CREATE EVENT IF NOT EXISTS
rank_by_integral_all
-- 定时任务执行规则
ON SCHEDULE
EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE,'00:02:30')
-- 永久执行还是执行一次
ON COMPLETION PRESERVE
-- 是否创建后立即生效
ENABLE
-- 注释
COMMENT '总积分排行榜定时任务'
-- 定时任务执行语句
DO
UPDATE
d_user
INNER JOIN
(
SELECT
(@rowNo:=@rowNo+1) AS rowno,a.id AS temp_id
FROM
(SELECT id,integral_all FROM d_user t WHERE t.`type`='党员' ORDER BY t.integral_all DESC,t.id ASC) a,
(SELECT @rowNo:=0) b
) AS temp
ON temp_id=d_user.`id`
SET d_user.`rank`=rowno
这期间遇见一个问题就是我直接用临时表的rowno和temp_id每问题。如果用temp.temp_id和temp.rowno则会报错,说找不到该字段,我想原因应该是mysql update语句执行顺序的问题造成的。