Как имеет значение последовательность в конструкторе запросов Laravel для mysql - PullRequest
0 голосов
/ 20 сентября 2018

Выполненный запрос имеет последовательность, отличную от кода. Запрос работает, но я не знаю, почему он работает!

Вот дело:

Iполучить roomId по $userId, а затем я получу все playerId по roomId

Шаги:

  1. в таблице room_player_relations, я получаюстрока где playerId = $userId.
  2. в таблице room_player_relations, я получаю все строки, где roomId = roomId строки, найденной в точке 1.
  3. выберите 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'

Это выглядит глупо, потому что он объединяет 2 одинаковые таблицы, where ставится после.Но это работает.Пожалуйста, скажи мне почему?Спасибо!

1 Ответ

0 голосов
/ 21 сентября 2018

Я обнаружил, что INNER JOIN - две таблицы не склеивают две таблицы вместе, но соответствуют всем возможным способам сопоставления ключа (roomId в моем примере).Я действительно могу увидеть результат INNER JOIN по следующему запросу:

select * from `room_player_relations` as `t1` 
inner join `room_player_relations` as `t2` 
on `t1`.`roomId` = `t2`.`roomId`

playerId roomId roomId playerId roomId

2 2 2 2

3 2 22

1 2 2 2

2 2 3 2

3 2 3 2

1 2 3 2

4 1 41

5 1 4 1

4 1 5 1

5 1 5 1

2 2 1 2

3 2 12

1 2 1 2

...