簡體   English   中英

在一個MySQL查詢中組合UPDATE,JOIN和ORDER BY

[英]Combining UPDATE, JOIN and ORDER BY in one MySQL query

我現在有以下代碼:

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());

這是什么(正確)是以下內容:

它以這種方式更新member_leagues表中的standing列,即按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

因此,您會看到,它對每個聯賽中的成員進行排名(按League_id區分)。 現在的問題是:數據庫結構已更改,該表中不再存在pts_total列。 它已移至名為teams的其他表中, member_leagues.member_id=teams.manager_id可以將其加入該表。 如何更改上面的查詢以執行與現在相同的操作,但是如何根據teams表中的pts_total列對成員進行排名?

我嘗試了以下操作,但收到錯誤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());

這對我來說太復雜了,有人可以告訴我我在做什么錯嗎?

文檔中對此進行了解釋:

對於多表語法,UPDATE更新滿足條件的table_references中命名的每個表中的行。 在這種情況下,不能使用ORDER BY和LIMIT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM