已编译的查询与代码的顺序不同。查询工作,但我不知道为什么它的工作!
这是生意:
我明白了 roomId
由 $userId
,然后我得到所有 playerId
由 roomId
步骤:
在表中 room_player_relations
,我吵架了 playerId
= $userId
.
在表中 room_player_relations
,我得到所有的行在哪里 roomId
= roomId
在点1中找到的行的。
选择 playerId
从第2点找到的行。
代码如下:
$players = DB::table('room_player_relations as t1')
->where('t1.playerId',$userId)
->join('room_player_relations as t2','t1.roomId','=','t2.roomId')
->select('t2.playerId')
->get();
以下是在调试栏中看到的查询:
select `t2`.`playerId` from `room_player_relations` as `t1`
inner join `room_player_relations` as `t2`
on `t1`.`roomId` = `t2`.`roomId`
where `t1`.`playerId` = '1'
它看起来很愚蠢,因为它将两个相同的表连接在一起 where
放在后面。但它是有效的。请告诉我为什么?谢谢!
1条答案
按热度按时间r6vfmomb1#
我发现了
INNER JOIN
-绑定两个表不是将两个表粘在一起,而是匹配匹配键的所有可能方式(roomId
在我的例子中)。我真的能看到INNER JOIN
通过以下查询:playerid roomid玩家id roomid
2 2 2 2
3 2 2 2
1 2 2 2
2 2 3 2
3 2 3 2
1 2 3 2
4 1 4 1
5 1 4 1
4 1 5 1
5 1 5 1
2 2 1 2
3 2 1 2
1 2 1 2