回声具有多个表的复杂INNER JOIN查询的结果

时间:2011-12-29 11:58:40

标签: php sql inner-join

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

“event”是一项运动比赛。它包含tournament_stageFK,它链接到tournament_stage表,其中包含锦标赛表格,其中包含锦标赛表格,其中包含锦标赛表格,该表格链接到锦标赛表格,其中包含与运动表相关联的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 个答案:

答案 0 :(得分:2)

您的结果将被提取为按列名索引的数组,这是您的几个列的“名称”...表名称sport,country,template等不是返回索引的一部分。因此,您需要提供唯一的列名称

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

答案 1 :(得分:1)

您需要使用列别名并访问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>";
}