0

我有一个带有玩家统计数据的 mysql 数据库。

玩家ID | 播放器 | 积分 | 联盟

我想对积分 DESC 的查询进行排序,但有些球员曾在其他联赛打过球,所以他们在 DB 中有多个记录。

理想情况下,我想对“大联盟”中的积分进行排序,当一名球员参加过其他联赛时,请在下面列出。它应该看起来像这样:

John Smith | 27 | Major League
Gary White | 24 | Major League
           | 32 | Minors
Joe Flatts | 15 | Major League

ETC...

我不确定在我的 PHP 的 MySQL 视图或服务器端创建它是否更容易。

有人有什么建议吗?

4

1 回答 1

1

您可以在 SQL 中通过加入最多第二个玩家表副本(仅过滤大联盟)来执行此操作,但它不适用于较大尺寸的表:

SELECT l.*, (l.league = 'Major League') AS major
FROM league_points AS l 
    LEFT JOIN league_points AS major 
        ON l.player = major.player AND major.league = 'Major League'
ORDER BY major.points DESC, major DESC, league DESC

您可能想从输出中删除主要列,它只是为了确保主要联盟在 ORDER BY 操作中排在第一位。如果您根本不希望没有参加过大联盟的球员出现,请将 LEFT JOIN 更改为 INNER JOIN。

于 2013-01-01T12:57:35.573 回答