我有一个带有玩家统计信息的mysql数据库。
playerid |球员|点|联赛
我想对点DESC进行排序查询,但是有些玩家在其他联赛中玩过,所以他们在数据库中有多条记录。
理想情况下,我想对“大联盟”中的分数进行排序,当一名球员参加其他联赛时,请列出以下内容。看起来应该是这样的:
John Smith | 27 | Major League
Gary White | 24 | Major League
| 32 | Minors
Joe Flatts | 15 | Major League
... ETC
我不确定在我的PHP中在MySQL视图或服务器端创建它是否更容易。
有人有任何建议吗?
答案 0 :(得分: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。