【发布时间】:2018-09-27 11:20:52
【问题描述】:
我在这里有两张桌子。我想使用优化的代码从这些表中检索数据。
表格:
game_sessions
Id, SessionName, StartTime
games
Id, GamesSessionId, GameName
代码 A:
$sessions = DB :: select('select Id as sessionId, SessionName from game_sessions');
foreach($sessions as $session)
{
$games = DB :: select('select Id as GameId, GameName from games where games.GameSessionId = '.$session->sessionId);
$session->Games = array();
$session->Games = $games;
}
return array('status'=>true, 'session'=>$sessions);
输出:($sessions)
{
"status": true,
"session":
[
{
"sessionId": 1,
"SessionName": "Regular bingo Manual",
"Games": [
{
"GameId": 1,
"GameName": "Game1"
}
]
},
{
"sessionId": 2,
"SessionName": "Regular Automatic",
"Games": [
{
"GameId": 2,
"GameName": "Game2"
},
{
"GameId": 3,
"GameName": "Game1"
}
]
},
{
"sessionId": 3,
"SessionName": "RegularDoubleAction",
"Games": [
{
"GameId": 4,
"GameName": "Game1"
}
]
}
]
}
代码 B:
$sessions = DB :: select('select game_sessions.Id as sessionId, SessionName, games.Id as GameId, games.GameName from game_sessions
join games on games.GameSessionId = game_sessions.Id');
return array('status'=>true, 'session'=>$sessions);
输出:($sessions)
{
"status": true,
"session":
[
{
"sessionId": 1,
"SessionName": "Regular bingo Manual",
"GameId": 1,
"GameName": "Game1"
},
{
"sessionId": 2,
"SessionName": "Regular Automatic",
"GameId": 2,
"GameName": "Game2"
},
{
"sessionId": 2,
"SessionName": "Regular Automatic",
"GameId": 3,
"GameName": "Game1"
},
{
"sessionId": 3,
"SessionName": "RegularDoubleAction",
"GameId": 4,
"GameName": "Game1"
}
]
}
这里我使用两种类型的代码。 在代码 A 中,我使用嵌套查询,但我会得到按会话分组的输出。 在代码 B 中,我没有使用嵌套查询(通过使用连接避免嵌套查询),但我没有得到按会话分组的输出。
我需要的是我不想使用嵌套查询,但我希望我的输出按会话分组。 我怎样才能做到这一点?
【问题讨论】:
-
“我想使用优化的代码来检索数据” - 所以我猜这段代码确实有效,你只是想知道是否有更好的方法?那你应该把它发到Code Review。
-
好的。对不起。我从来不知道代码审查。下次我会用那个。谢谢。
标签: php mysql sql laravel lumen