我需要在actionName上对此表进行排序(它是从动作表中获取的,还包含一个id)。但是,某些玩家可能没有特定actionName的任何记录,如此屏幕截图所示
我已经完成了让它显示第一个结果,但是我不知道如何让它排序,例如,每次kill或win,它应该总是对用户名进行分组,因为我需要结果集来显示一张桌子,但随后是顶部杀伤率最高的玩家。我还需要显示其他相应的表,而不必执行大量查询。
这是我用来完成第一个结果集的SQL
SELECT
p.playerName,
a.actionName,
a.id as actionId,
SUM(a.id) AS amount,
pa.timestamp
FROM playeraction pa
LEFT JOIN action a ON a.id = pa.action_id
INNER JOIN player p
ON p.id = pa.player_id
GROUP BY
pa.player_id,
pa.action_id
ORDER BY
p.playerName,
amount DESC
答案 0 :(得分:0)
您可以创建一个按玩家名称分组的视图,然后在该记录的不同列中分别计算kill,win和death计数。这样你就可以为每个动作设置特定的列,如果用户有这样的动作,它就不会打扰你。列值只是0,因为没有找到记录总和。这也将解决订购问题,因为您可以按每列订购:
ORDER BY KillCount, WinCount, DeathCount
在这种情况下,如果您要创建新操作,则必须修改视图。
另外,你为什么总结a.Id?你不是指算数吗?
编辑:你也可以从Action表中选择,然后加入PlayerAction表,这样就可以为你有动作记录的每一个动作。类似的东西:
SELECT
a.Id, a.ActionName,
p.Name,
pa.Amount, pa.TimeStamp
FROM Actions a
LEFT JOIN Players p on 1 = 1
LEFT JOIN PlayerActions pa on pa.ActionId = a.Id
GROUP BY
...
ORDER BY
...
只有这样你才需要通过某种游戏匹配ID过滤玩家。
然后可以选择在收到查询结果时计算应用程序中的实际结果。这也适用于您的查询。