Вывод результатов сложного запроса INNER JOIN с несколькими таблицами - PullRequest
1 голос
/ 29 декабря 2011

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

«событие» - это спортивный матч. Он содержит tour_stageFK, который связан с таблицей tour_stage, которая содержит tourFK, которая связана с турнирной таблицей, которая содержит tour_templateFK, которая связана с таблицей tour_template, которая содержит 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>";
}

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

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

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

1 голос
/ 29 декабря 2011

Вам необходимо использовать псевдонимы столбцов и получить доступ к тем, которые вы используете при вызове.Вместо 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>";
}
...