2013-02-06 53 views
1

1)我需要:“查找所有玩家的游戏玩家‘55’的同一个游戏的游戏ID大于2"MySql的从桌上游戏找到玩家X的朋友

的表如下在下面的图片:

enter image description here

我试过很多报表,但他们产生错误的结果:

SELECT Games.id, Players.id from Games, Players 
WHERE Players.id='55' and Games.id > 2; 

2 )另外,如果我说我需要像以前一样选择相同的内容,那么“游戏的ID只是最后2以降序”(即,只有在这种情况下ID为3和4的游戏,但在其他情况下可能不同)。我只能想到比较Games.id与用户输入的数字,但你们中的一些人可能知道另一种方式...

有人可以帮我吗?谢谢!

编辑

1)SELECT b.id_player, b.id_game FROM Players a, Players b WHERE a.id_player = '55' AND b.id_game = a.id_game AND b.id_player <> '55' AND a.id_game > 2;

2)选项1个工程问题1,但问题2将要求其不为我工作的头等条款。

如何使用LIMIT或TOP实现与a.id_game > 2相同?我想只能从最后2个ID_GAMEs的结果,在这种情况下是ID = 3和id = 4 ......

编辑: 好没关系,我已经得到了第一个问题。我会把LIMIT放到一个固定的数字上。感谢您的帮助

+0

看起来像功课。尝试IN()子句。 – Randy

+0

'select id_player,id_game from id_game in(选择id_player = 55和id_game> 2的玩家的id_game)''? – jonhopkins

回答

1

您需要自行加入。我现在也无法测试它 - 会在一会儿做一个SQL小提琴,但它应该是这样的:

SELECT b.id_player, b.id_game 
FROM Players a, 
    Players b 
WHERE a.id_player = '55' 
AND b.id_game = a.id_game 
AND b.id_player <> '55' 
AND a.id_game > 2 
order by b.id_game 
limit 2; 
+0

看起来不错,但我做了一些改动 – RNO

+0

是的,很好的捕捉。我也回答了2 .... –

+0

这只会返回2行,不管有多少玩家在玩55号游戏,这个查询并不能解决问题。 – pedromarce

1
SELECT Players.* 
FROM 
(SELECT id_game 
    FROM Players 
    WHERE id_player = 55 
    ORDER BY id_game DESC 
    LIMIT 2) 
AS A JOIN Players ON Players.id_game = A.id_game 
WHERE id_player <> 55 

编辑。子查询中的LIMIT没有在mysql中实现(原始文章),mysql本身的提议替代方案是使用这样的查询,这次进行了测试。

+0

我正在使用MySql TOP 2似乎不为我工作(作品没有),我也想看到只有玩家'55'的朋友(在他们玩同一个游戏的意义上的朋友) – RNO

+1

我已经编辑了使用mysql的答案dialect – pedromarce

+0

这是行不通的,我不能接受你的答案,因为语法是错误的,LIMIT 2也只会显示最后2行,并不是所有结果都带有最后2个game_id。但我真的很感谢你的帮助。非常感谢您的时间 – RNO

1

这肯定会起作用。

SELECT a.* FROM Players a 
INNER JOIN (SELECT id,id_player,id_game 
      FROM players 
      WHERE id_game > 2 AND id_player = 55 
      ) b 
ON a.id_game = b.id_game 
WHERE a.id_player != 55;