Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql从桌面游戏中找到玩家X的朋友_Mysql_Sql_Logic - Fatal编程技术网

MySql从桌面游戏中找到玩家X的朋友

MySql从桌面游戏中找到玩家X的朋友,mysql,sql,logic,Mysql,Sql,Logic,1我需要:找到所有玩玩家'55'的相同游戏的玩家,游戏id大于2 各表如下图所示: 我尝试了许多陈述,但它们产生了错误的结果: 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我需要:找到所有玩玩家'55'的相同游戏的玩家,游戏id大于2

各表如下图所示:

我尝试了许多陈述,但它们产生了错误的结果:

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从玩家a、玩家b中选择b.id_玩家、b.id_游戏,其中a.id_玩家='55'和b.id_游戏=a.id_游戏,b.id_玩家'55'和a.id_游戏>2

2选项1适用于问题1,但问题2需要一个对我不适用的TOP子句

如何使用LIMIT或TOP实现与a.id_game>2相同的效果?我只想要最后两个ID_游戏的结果,在这个例子中是ID=3和ID=4

编辑: 没关系,我有第一个问题。我只会限制到一个固定的数字。谢谢你的帮助

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

编辑。子查询中的限制在mysql中尚未实现,但原始帖子,mysql本身的替代方案是使用这样一个查询,这次测试。

您需要一个自连接。我现在也无法测试这一点-我将在片刻内完成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;

这肯定会奏效的

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;

好像是家庭作业。尝试IN子句。选择id_player,id_game from players where id_game IN select id_game from players where id_player=55和id_game>2?我使用的MySql TOP 2似乎不适用于我,如果没有它,我也只想看到玩家“55”的朋友,因为他们玩同一个游戏,这将不起作用,我不能接受你的答案,因为语法错误,而且限制2只显示最后2行,而不是最后2个游戏ID的所有结果。但我真的很感谢你的帮助。非常感谢您的时间现在它正在工作,经过测试,您对限制的理解是错误的,它过去是,现在只是在子查询中,因此它只为玩家55筛选最后两个游戏,然后主查询将返回这些游戏的所有玩家的任何数字,不限于55。看起来不错,但我做了一些更改这将只返回2行,无论有多少玩家在玩55号游戏,这个查询都不能解决问题。