PHP и MySQL – эффективная обработка нескольких отношений между несколькими

Я ищу советы по наилучшему способу получения и отображения моих данных с использованием MySQL и PHP.

У меня есть 3 таблицы, от 1 до многих отношений:

Каждый РАСПИСАНИЕ имеет много ПЕРЕКРЕСТКОВ, и каждое переопределение имеет много МЕСТ . Я хотел бы получить эти данные, чтобы все они могли отображаться на одной странице PHP, например, список моих РАСПИСАНИЙ. В каждом списке расписаний OVERRIDES, а в каждом списке переопределения – LOCATIONS.

Вариант 1 – лучший способ сделать это сделать 3 отдельных SQL-запроса, а затем записать их в объект PHP? Затем я мог бы перебирать каждый массив и проверять соответствие в родительском массиве.

Вариант 2 – я немного подумал о присоединениях, однако два правильных объединения вернут мне строку для каждого входа во все 3 таблицы.

    Любые мысли и комментарии будут оценены.

    С наилучшими пожеланиями, Бен.

    Related of "PHP и MySQL – эффективная обработка нескольких отношений между несколькими"

    Если вам действительно нужна каждая часть данных, вы будете получать одинаковое количество строк, независимо от того, как вы это делаете. Лучше всего получить все в одном запросе.

    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 

    Заказывая такие результаты, вы можете выполнить итерацию по набору результатов и перейти к следующему расписанию всякий раз, когда изменяется график, и следующее местоположение при изменении locationid.

    Изменить: возможный пример того, как превратить эти данные в трехмерный массив –

     $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; } 

    Довольно примитивный, я думаю, ваш код будет выглядеть по-другому, но, надеюсь, это имеет смысл.