Если вам действительно нужен каждый фрагмент данных, вы будете получать одинаковое количество строк, независимо от того, как вы это делаете.Лучше всего получить все это одним запросом.
SELECT schedule.id, overrides.id, locations.id, locations.name
FROM schedule
JOIN overrides ON overrides.schedule_id = schedule.id
JOIN locations ON locations.override_id = overrides.id
ORDER BY schedule.id, overrides.id, locations.id
Упорядочив результаты таким образом, вы можете выполнять итерацию по набору результатов и переходить к следующему расписанию всякий раз, когда меняется расписание, и к следующему местоположению, когдаизменения местоположения.
Редактировать: возможный пример того, как превратить эти данные в трехмерный массив -
$last_schedule = 0;
$last_override = 0;
$schedules = array();
while ($row = mysql_fetch_array($query_result))
{
$schedule_id = $row[0];
$override_id = $row[1];
$location_id = $row[2];
$location_name = $row[3];
if ($schedule_id != $last_schedule)
{
$schedules[$schedule_id] = array();
}
if ($override_id != $last_override)
{
$schedules[$schedule_id][$override_id] = array();
}
$schedules[$schedule_id][$override_id][$location_id] = $location_name;
$last_schedule = $schedule_id;
$last_override = $override_id;
}
Довольно примитивно, я думаю, ваш код будет выглядеть по-другому, но, надеюсь, этоимеет некоторый смысл.