这是我第一个问题。我有一个复杂的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>";
}