2015-08-14 52 views
-2

我想获得我对阵的前5名对手。MySQL - 获得前5名的对手

的表是如下

USERS : 
user_id name    email 
     1 : Gait Bakker  : [email protected] 
     2 : Freek ter Bekke : [email protected] 
     3 : Jan Zomer  : [email protected] 
     4 : Mick Dundee  : [email protected] 
     5 : Sjoerd Trekhaar : [email protected] 

GAMES : 
    game_id type training **created_by started_by **opponent_id won_by date 
      1 1  1   2    2   4  2 2015-08-10 
      2 1  1   5    2   2  5 2015-08-10 
      3 1  1   4    4   2  4 2015-08-10 
      3 1  1   2    3   3  3 2015-08-10 

问题是与领域**,它需要数前5位的对手。

我能成为游戏的创造者(CREATED_BY)我可以是opponent_id(别人开始游戏)。

不过,如果我是对手,我对阵另一名球员。

编辑 请使用user-id = 2例如。

随着更多:培训需求为1和won_by IS NOT NULL(需要待补缺)

结果SQL 大多数交手的对手

user_id = 4, count = 2 
user_id = 3, count = 1 
user_id = 5, count = 1 

因此,这意味着我打得最反对用户ID 4,然后USER_ID = 3和USER_ID = 5

+0

标准前5推导Logon_ID? – jarlh

+0

如果你喜欢,可以考虑下列行为这个简单的两步过程:1.如果您还没有这样做,提供适当的DDL(和/或sqlfiddle),这样我们可以更容易复制的问题。 2.如果您还没有这样做,提供与在步骤1提供 – Strawberry

+0

@Strawberry的信息与期望的结果集:使用USER_ID = 2,但每一个登录的用户拥有另一个用户ID。 – PostMans

回答

-1

按我理解,顶对手将根据Won_By

被认为
SELECT TOP 5 NAME, COUNT(*) as COUNTS FROM USERS 
    INNER JOIN 
    GAMES 
    ON GAMES.WON_BY = USERS.user_id 
    WHERE user_id <> Logon_ID 
    GROUP BY NAME 
    ORDER BY COUNTS 

根据你的代码

+0

谢谢您的回复 我的意思是最顶级的对手,赢得或失去匹配(见我在我的文章中的编辑) – PostMans