0

我目前有以下代码:

mysql_query("SET @standing = 0") or die(mysql_error());
mysql_query("SET @league = 0") or die(mysql_error());

$query="UPDATE member_leagues
    SET 
        standing = (@standing := IF(@league = league_id,@standing+1,0)) + 1,
        league_id = @league := league_id
    WHERE active='1'
    ORDER BY league_id,pts_total DESC";

mysql_query($query) or die(mysql_error());

这(正确)的作用如下:

它以这样一种方式更新表中的standing列,即按列对行进行分组,并按列对每个组进行排名。例如,在查询前后取下表。member_leaguesleague_idpts_total

前:

id | league_id | pts_total | standing | member_id
1  | 14        | 25        | 0        | 234
2  | 8         | 19        | 0        | 89
3  | 14        | 12        | 0        | 35
4  | 14        | 10        | 0        | 200
5  | 8         | 16        | 0        | 94

后:

id | league_id | pts_total | standing | member_id
1  | 14        | 25        | 1        | 234
2  | 8         | 19        | 1        | 89
3  | 14        | 12        | 2        | 35
4  | 14        | 10        | 3        | 200
5  | 8         | 16        | 2        | 94

所以,你看,它对每个联盟中的成员进行排名(由league_id 区分)。现在,问题是:数据库结构发生了变化,该表中不再存在 pts_total 列。它已被移动到另一个名为 的表中teams,该表可以通过 连接到该表member_leagues.member_id=teams.manager_id。如何更改上面的查询以执行与现在相同的操作,但根据表pts_total中的列对成员进行排名teams

我尝试了以下方法,但出现错误Incorrect usage of UPDATE and ORDER BY

mysql_query("SET @standing = 0") or die(mysql_error());
mysql_query("SET @league = 0") or die(mysql_error());

$query="UPDATE member_leagues left join teams on member_leagues.member_id=teams.manager_id
    SET 
        member_leagues.standing = (@standing := IF(@league = member_leagues.league_id,@standing+1,0)) + 1,
        member_leagues.league_id = @league := member_leagues.league_id
    WHERE member_leagues.active='1'
    ORDER BY member_leagues.league_id,teams.pts_total DESC";

mysql_query($query) or die(mysql_error());

这对我来说太复杂了,有人可以告诉我我做错了什么吗?

4

1 回答 1

0

这在文档中进行了解释:

对于多表语法,UPDATE 更新 table_references 中命名的每个表中满足条件的行。在这种情况下,不能使用 ORDER BY 和 LIMIT。

于 2013-05-23T15:52:36.273 回答