回显包含多个表的复杂INNER JOIN查询的结果


Echo results of a complicated INNER JOIN query with multiple tables

这是我第一个问题。我有一个复杂的SQL数据库,我需要连接具有相同列名的不同表。

"event"是一场体育比赛。它包含链接到锦标赛表的锦标赛_stagefk,它包含链接到锦标赛表的锦标赛_fk,锦标赛表包含链接到锦标赛表的锦标赛_templatefk,锦标赛表包含链接到锦标赛表的锦标赛_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>";
}

你的结果是作为一个数组索引的列名,这是"名称"为您的几个列…表名sport、国家、模板等不是返回索引的一部分。所以你需要提供唯一的列名

为每个列设置别名(例如SELECT sport.name AS sport_name),然后在echo中通过别名引用它(例如$result['sport_name'])

您需要使用列别名并在fetch调用中访问它们。而不是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>";
}