唯一的排序场景


Unique sorting scenario

我有一个mysql数据库与球员统计。

playerid | player | points | league

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

理想情况下,我希望对"大联盟"中的积分进行排序,当一个球员在其他联盟中打球时,将其列在下面。它应该看起来像这样:

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

等等……

我不确定在MySQL视图中创建这个更容易,还是在我的PHP服务器端。

谁有什么建议?

您可以在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。