0
SELECT * from meets
 LEFT JOIN teams as hteam on meets.meet_hometeam=hteam.team_id 
 LEFT JOIN teams as ateam on meets.meet_awayteam=ateam.team_id 
 LEFT JOIN teams as altloc on (meets.meet_altloc=altloc.team_id and meets.meet_altloc!='')
 where meet_date between ($now+(4*86400)) and ($now+(5*86400) or meets.meet_id='2')

PHPの場合:

$var = $queryvar->fetch_object();

$var->ateam.team_townドットをテーブルのオブジェクトとしてではなく連結として扱っていると呼ぶと、問題が発生します。

4

1 に答える 1

1

やるSELECT *ときJOINUNION質問するときはしないでください。代わりに、必要な列について具体的に説明してください。異なるテーブルで列の名前が同じである場合は、それらにエイリアスを割り当てる必要があります。

類似した名前の列を区別する必要があることは別として、返される順序について決定論的であるという利点と、これに自動的に引き込まれたくない列を追加する将来のスキーマ変更からの保護(画像など)が得られます。ブロブデータか何か)。

SELECT
  /* specify columns from each table with aliases */
  hteam.team_id AS hometeam_id,
  ateam.team_id AS awayteam_id,
  hteam.team_town AS hometeam_town,
  ateam.team_town AS awayteam_town,
  ...
  ...
  etc...
FROM meets
 LEFT JOIN teams as hteam on meets.meet_hometeam=hteam.team_id 
 LEFT JOIN teams as ateam on meets.meet_awayteam=ateam.team_id 
 LEFT JOIN teams as altloc on (meets.meet_altloc=altloc.team_id and meets.meet_altloc!='')
 WHERE meet_date between ($now+(4*86400)) and ($now+(5*86400) or meets.meet_id='2')

次に、PHPで、選択したエイリアスで呼び出します$var->hometeam_town, $var->hometown_id, $var->awayteam_town

于 2012-06-23T19:43:50.717 に答える