有人可以帮我创建一个可以在 MySQL 8 下运行的 SQL 查询。目前,这个查询在我的本地主机上运行,但是当传输到 Live 时显示错误。
此查询从 10 到 1 对赛车手进行评分(第 1 名 = 10 分,第 10 名 = 1 分),在星期一午夜自动运行。
这是示例表:
CREATE TABLE `tbl_race_has_list` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`timer` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`weekly_score` SMALLINT NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
$sql = "UPDATE tbl_race_has_list
INNER JOIN
(
SELECT *, ROW_NUMBER() OVER (order by timer ASC) AS RacerRank
FROM tbl_race_has_list
WHERE DATE(created)
BETWEEN DATE_SUB(DATE(now()), INTERVAL (WEEKDAY(now()) - 1 + 7) % 7 DAY)
AND DATE_ADD(DATE(now()), INTERVAL 6 - (WEEKDAY(now()) - 1 + 7) % 7 DAY)
ORDER BY timer ASC LIMIT 0, 10
) c
ON racerTime.tbl_race_has_list.id = c.id
SET racerTime.tbl_race_has_list.weekly_score = 11 - c.RacerRank";
更新。我创建了一个可以在 MySQL 8 版本以下运行的 SQL 查询。它按预期工作,但我愿意接受更好的方法。
UPDATE tbl_race_has_list
INNER JOIN
(
SELECT *, (@row_number := @row_number + 1) AS RacerRank
FROM tbl_race_has_list
(SELECT @row_number := 0) AS x
WHERE DATE(created)
BETWEEN DATE_SUB(DATE(now()), INTERVAL (WEEKDAY(now()) - 1 + 7) % 7 DAY)
AND DATE_ADD(DATE(now()), INTERVAL 6 - (WEEKDAY(now()) - 1 + 7) % 7 DAY)
ORDER BY timer ASC LIMIT 0, 10
) c
ON racerTime.tbl_race_has_list.id = c.id
SET racerTime.tbl_race_has_list.weekly_score = 11 - c.RacerRank