我正在处理php/MySql中的一些代码,我需要根据分数值更新一个名为scorerank的字段。我发现这里以前的疑问,解决了我一直在寻找:修改一个mysql表来显示基于列值的排名
Update the rank in a MySQL Table
我修改了他们的榜样和我的数据库工作。我还添加了一个条件,以便我只修改具有特定锦标赛和桌面的列。我曾经在内部唯一索引变量加入到ID更新哪一行 - 我想我做的对,但我得到了以下错误:
1248 - 每一个派生表必须有它自己的别名
这里的我的代码。任何人都可以发现错误吗?
UPDATE tscores
JOIN (SELECT p.userid,p.scoreid,
IF(@lastPoint <> p.score,
@curRank := @curRank + 1,
@curRank) AS rank,
IF(@lastPoint = p.score,
@curRank := @curRank + 1,
@curRank),
@lastPoint := p.score
FROM tscores p
WHERE (p.tourneyid=1 and p.tableid=2)
JOIN (SELECT @curRank := 0, @lastPoint := 0)
ORDER BY p.score DESC
) ranks ON (ranks.userid = tscores.userid)
SET tscores.scorerank = ranks.scorerank
WHERE tscores.scoreid = p.scoreid
这里是我的工作表:
CREATE TABLE IF NOT EXISTS `tscores` (
`scoreid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tourneyid` int(10) unsigned NOT NULL,
`tableid` int(10) unsigned NOT NULL,
`userid` int(10) unsigned NOT NULL,
`score` int(16) unsigned NOT NULL DEFAULT '0',
`scorestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`scoreround` int(3) unsigned NOT NULL DEFAULT '0',
`scoregroup` int(3) unsigned NOT NULL DEFAULT '0',
`scorerank` int(4) unsigned DEFAULT NULL,
PRIMARY KEY (`scoreid`),
KEY `tourneyid` (`tourneyid`,`tableid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=62 ;
我仍然得到与此相同的错误: UPDATE tscores ... SET tscores.scorerank = ranks.scorerank WHERE tscores.scoreid = ranks.scoreid –
有一些标记,我不了解那里,我不能是我可以更有帮助..对不起 – Nihat