平台: MySQL / PHP
场景:创建好友排行榜,其中包含玩家的所有朋友,并在单个查询中将玩家包含在排行榜中。
详细信息:我正在尝试创建一个查询,其结果包括与所有朋友一起选择的玩家。排名将取决于谁拥有最多的胜利。
问题:这可以在单个查询中完成,或者获取结果集的速度更快,然后将每个朋友的胜利数与玩家的胜利数进行比较,以确定排名顺序。
其他详细信息:
以下是我必须返回一名玩家及其朋友以及总赢额和金额的查询:
SELECT a.profile_id, 'player', a.win AS player_wins, b1.profile_id AS friend_id,
b1.handle AS friend_handle, b1.win AS friend_wins, b1.bankroll AS friend_bank
FROM ldrbrd_cache_tmp a, buddy_tbl b, ldrbrd_cache_tmp b1
WHERE a.profile_id = b.profile_id
AND b.buddy_id = b1.profile_id
AND a.profile_id <> 1
AND b.buddy_id <> 1
AND a.profile_id = 2
ORDER BY a.profile_id, b1.win DESC;
结果:
id | name | player-wins | friend-id | friend-name | friend-wins | friend-money
'2','player' ,'200' ,'50' ,'Freddy K' ,'303' ,'10004572'
'2','player' ,'200' ,'53' ,'dannn' ,'217' ,'92065'
'2','player' ,'200' ,'51' ,'YoDood' ,'126' ,'2383600'
'2','player' ,'200' ,'58' ,'princess' ,'19' ,'89565'
'2','player' ,'200' ,'71' ,'com-on' ,'8' ,'-9530'
'2','player' ,'200' ,'57' ,'foolzzz' ,'7' ,'210'`
结果显示玩家获胜为200,因此在这种情况下,玩家应该排名第3。
你会注意到我有玩家获胜但我怎么能比较玩家获胜和朋友获胜以在同一个SQL语句中返回排名? OR是将结果分配给数组然后确定玩家适合的位置的最佳方法吗?
修改 所以我提出了一个有效的UNION,这是唯一的选择吗?
SELECT profile_id, handle, win FROM (
SELECT a.profile_id, a.handle, a.win
FROM ldrbrd_cache_tmp a
WHERE a.profile_id = 2
UNION ALL SELECT b1.profile_id, b1.handle, b1.win
FROM ldrbrd_cache_tmp a, buddy_tbl b, ldrbrd_cache_tmp b1
WHERE a.profile_id = b.profile_id
AND b.buddy_id = b1.profile_id
AND a.profile_id <> 1
AND b.buddy_id <> 1
AND a.profile_id = 2
ORDER BY profile_id, win DESC) AS player_ranking
ORDER BY win DESC;
这似乎现在有效,除非有人有更好的解决方案吗?