1

平台: 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 语句中返回排名?或者是最好的做法是将结果分配给一个数组然后确定玩家适合的位置?

编辑: 所以我想出了一个有效的 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;

这似乎暂时有效,除非有人有更好的解决方案?

4

0 回答 0