2011-12-29 16 views
1

これは私の最初の質問です。複雑なSQLデータベースがあり、同じ列名を持つ異なるテーブルに参加する必要があります。複数のテーブルを持つ複雑なINNER JOINクエリの結果をエコーする

「イベント」はスポーツマッチです。トーナメントテーブルにリンクされたtournament_stageFKを含み、tournament_stageテーブルにはトーナメントテーブルにリンクされているtournamentFKが含まれており、tournament_templateFKはtournament_templateテーブルにリンクされており、スポーツテーブルにリンクされたsportsFKを含みます。

それで、どのスポーツがマッチしているのかを知るために、私はインナージョイントをする必要があります。そうでなければ、何百万回もデータベースをオープンしなければなりません。これを行う唯一の方法はこれですが、結果を表示する方法はわかりません。結果をエコーするために私の貧弱な試みは以下の通りです:

$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>"; 
} 

答えて

1

フェーズコールの列エイリアスとアクセスにアクセスする必要があります。 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>"; 
} 
+0

ありがとうございます。私のコードに誤りがあったので動かなかったが、あなたの答えは私を解決に導いた。 –

+0

ありがとう、マイケル! –

2

あなたの結果は...テーブル名スポーツ、国、テンプレートあなたの列のいくつかのための「名前」で、カラム名をインデックスとする配列として取得され、等は返されたインデックスの一部ではありません。したがって、ユニークになる列名を指定する必要があります

各列のエイリアスを設定します(例:SELECT sport.name AS sport_name)。エコー内の別名で参照します(例:$ result ['sport_name'] )。

+0

ありがとうございました! –

関連する問題