Вложенные циклы с запросами в mysql (базу)

Рейтинг: -1Ответов: 1Опубликовано: 10.04.2015

Есть вот такой вот код:

$unique_country = "SELECT DISTINCT country FROM data_base"; // узнаем уникальные страны

Далее узнаем игры в этой стране и к каждой игре узнаем состав команд:

while($uc_result = mysqli_fetch_assoc($unique_country)) {
    $game = "SELECT * FROM game WHERE country='".$uc_result['country']."'"; //скажем, ближайшие игры этой страны
    while($g_result = mysqli_fetch_assoc($game)) {
        $players_for_game_team_1 = "SELECT * FROM players WHERE game='".$g_result['id']."' AND TEAM='1'"; //состав на игру команды 1
        $players_for_game_team_2 = "SELECT * FROM players WHERE game='".$g_result['id']."' AND TEAM='2'";  //состав на игру команды 2
        while($team1_players = mysqli_fetch_assoc(...
        while($team2_...
    }
}

То-есть получается, что к цикле есть цикл в котором происходит каждый раз запрос в базу, а то и по 2-3 запроса в базу и по несколько циклов, правильное ли это решение? Есть более лучшее решение (к примеру будет ли этом правильно сделать через вложенные запросы и как их разобрать с помощью php)? Если да, напишите, пожалуйста, хотя бы коротко о главном, а то нигде не могу найти подобной информации... буду очень благодарен, а то не знаю правильно ли так делать и остановился, что бы двигаться дальше...

Если сделать вложенные запрос то получится примерно такой результат:

страна1 | игра1 | команда1 игрок 1 для игры1 | команда2 игрок 1 для игры1
страна1 | игра1 | команда1 игрок 2 для игры1 | команда2 игрок 2 для игры1
страна1 | игра1 | команда1 игрок 3 для игры1 | команда2 игрок 3 для игры1

страна1 | игра2 | команда1 игрок 1 для игры1 | команда2 игрок 1 для игры1

как такой вложенный запрос забирать с помощью php?

Ответы

▲ 1

Данный код повысит нагрузку как на базу, так и на сам интерпретатор.

В Вашем случае нужно анализировать сам запрос и оптимизировать его.

Ссылки к прочтению:

  1. MySQL JOIN
  2. Вложенные SELECT

UPD: Возможно автору нужна документация с примерами: Пример работы с запросом в виде ассоциативного массива

По ссылке приведен пример, как забирать результат в виде ассоциативного массива. Ассоциативный массив — массив с ключами в виде названия столбцов (конкретно эта ситуация), вместо цифровых значений.

UPD2:

Прошу прощения, не заметил у автора в коде отсутствие исполнения запроса: $result = $mysqli->query($game). Эта строка будет "говорить" php исполнить запрос, содержащийся в переменной $game.

Для более полного понимания ситуации, ознакомьтесь внимательно с приведенными примерами в документации по ссылкам!