Эхо-результаты сложного запроса INNER JOIN с несколькими таблицами

Это мой первый вопрос. У меня сложная база данных SQL, и мне нужно объединить разные таблицы с одинаковыми именами столбцов.

«Событие» – спортивный матч. Он содержит турнир_stageFK, который связан с таблицей турнира_stage, которая содержит турнирFK, который связан с турнирной таблицей, которая содержит турнир_templateFK, который связан с таблицей турнирной таблицы, которая содержит sportFK, которая связана со спортивной таблицей.

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

$SQL = "SELECT sport.name, country.name, tournament_template.name, tournament.name, tournament_stage.name, event.* FROM tournament_template INNER JOIN sport ON tournament_template.sportFK = sport.id INNER JOIN tournament ON tournament.tournament_templateFK = tournament_template.id INNER JOIN tournament_stage ON tournament_stage.tournamentFK = tournament.id INNER JOIN event ON event.tournament_stageFK = tournament_stage.id INNER JOIN country ON tournament_stage.countryFK = country.id WHERE DATE(event.startdate) = CURRENT_DATE() ORDER BY sport.name ASC, country.name ASC, tournament_stage.name ASC, event.startdate ASC"; $result = mysql_query($SQL); while($get=mysql_fetch_array($result)) { echo $result['event.name']; echo "<br>"; } 

Solutions Collecting From Web of "Эхо-результаты сложного запроса INNER JOIN с несколькими таблицами"

Вам нужно использовать псевдонимы столбцов и получить доступ к ним в вашем вызове извлечения. Вместо event.* , Будьте ясны о столбцах, которые вам нужны:

 $SQL = "SELECT sport.name AS sportname, country.name AS countryname, tournament_template.name AS templatename, tournament.name AS tournamentname, tournament_stage.name AS stagename, /* Use explicit column names instead of event.* */ event.name AS eventname, event.someothercol AS someother FROM tournament_template ...etc... ...etc..."; // Later... while($row=mysql_fetch_array($result)) { echo $row['eventname']; echo "<br>"; } в $SQL = "SELECT sport.name AS sportname, country.name AS countryname, tournament_template.name AS templatename, tournament.name AS tournamentname, tournament_stage.name AS stagename, /* Use explicit column names instead of event.* */ event.name AS eventname, event.someothercol AS someother FROM tournament_template ...etc... ...etc..."; // Later... while($row=mysql_fetch_array($result)) { echo $row['eventname']; echo "<br>"; } 

Ваш результат получается как массив, индексированный по имени столбца, который является «именем» для нескольких ваших столбцов … название таблицы, страна, шаблон и т. Д. Не является частью возвращаемого индекса. Поэтому вам нужно указать имена столбцов, которые будут уникальными

Задайте псевдоним для каждого из ваших столбцов (например, SELECT sport.name AS sport_name), затем укажите его псевдоним в своем эхом (например, $ result ['sport_name']).