我有两个桌子。游戏和玩家。我可以和所有玩家一起玩所有游戏。或所有属于玩家的游戏。但是我想要的是所有游戏,所有有指定球员的球员。
表格
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);
答案 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。