У меня есть следующие таблицы в MySQL:
team: id, name, [more stuff]
person: id, name, team, [more stuff]
entry: id, name, team, [more stuff]
registrations: id, event_id, team, status
registration_people: registration_id, person_id
registration_entries: registration_id, entry_id
Я хотел бы запросить базу данных и вернуть подробную информацию о каждом человеке и записи; сгруппированы по регистрации. За эти годы я научился делать как можно больше в SQL. Однако я не вижу хорошего способа сгенерировать это в одном запросе, не выполняя большую работу в PHP. Наивный способ сделать это будет [псевдокод]:
$registrations = $model->get_registrations($event_id);
foreach ($registrations as $registration)
{
$registration['people'] = $model->get_people_in_registration($registration['id']);
$registration['entries'] = $model->get_entries_in_registration($registration['id']);
}
return $registrations;
Этот код выполняет многократные обращения к серверу и не должен использоваться. У меня была другая идея сделать что-то подобное:
$registrations = $model->get_registrations($event_id);
$registration_entries = $model->get_registration_entries($event_id);
$registration_people = $model->get_registration_people($event_id);
foreach ($registrations as $r)
$reg[$r['id']] = $r;
foreach ($registrations_entries as $e)
$reg[$e['registration_id']]['entries'][] = $e;
foreach ($registrations_people as $p)
$reg[$p['registration_id']]['people'][] = $p;
return $reg;
Где get_registration_entries/get_registration_people
выполняет объединение и получает все registration_entries
, связанные с регистрациями в $event_id
. Тем не менее, похоже, что я делаю соединение в PHP; когда я смогу заставить SQL сделать это для меня. Я просто параноик, или я что-то здесь упускаю?