我想从一名玩家参与的所有游戏中获取所有玩家

时间:2019-10-10 15:35:08

标签: mysql sql

我有两个桌子。游戏和玩家。我可以和所有玩家一起玩所有游戏。或所有属于玩家的游戏。但是我想要的是所有游戏,所有有指定球员的球员。

表格

游戏

id 类型 等等...

播放器

id gameId => Game.id 选手姓名 userId => User.id

用户

id => Player.userId

我无法使用的查询是:

 Select g.id, g.type, .... 
     p.playerName, p.userId ....
     FROM game g
     LEFT JOIN player p on p.gameId = g.id
     WHERE p.userId in (42);  

1 个答案:

答案 0 :(得分:1)

我假设Player是一个表格,将游戏和用户之间的M:M关系分为两个1:M关系

$sql="SELECT * FROM table LIMIT 10"; 

我们需要一个子查询来获取用户ID为42的Player所属的所有gameID。获得游戏ID列表后,我们可以将所有这些游戏以及他们的玩家 all 一起获取。

如果像原来那样使用where子句将查询限制为仅用户42,则无法将所有玩家都淘汰掉:

 SELECT *
 FROM 
   game g
   INNER JOIN player p on p.gameId = g.id
   INNER JOIN user u on p.userid = u.id
 WHERE 
   p.gameID in (SELECT x.gameId FROM player x where x.userid = 42);  

这很可能会返回很多行,但它们仅适用于玩家42。