目前我有以下代码:
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_leagues
列,以便按league_id
列对行进行分组,并按pts_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
所以,你看,它对每个联盟中的成员进行排名(以联盟_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());
这对我来说太复杂了,有人能告诉我我做错了吗?
答案 0 :(得分:0)
对于多表语法,UPDATE更新每个名为的表中的行 在table_references中满足条件。在这种情况下,ORDER 不能使用BY和LIMIT。