2011-01-09 16 views
0

私は1つの変数に基づいて情報を取得するために必要な5つのテーブルを用意しました。MySQL:他のテーブルの情報に基づいて複数のテーブルから情報を取り出す方法は?

gameinfo 
id | name | platforminfoid 

gamerinfo 
id | name | contact | tag 

platforminfo 
id | name | abbreviation 

rosterinfo 
id | name | gameinfoid 

rosters 
id | gamerinfoid | rosterinfoid 

1つの変数は、すべての関連データを引っ張ることになる、rosterinfoからすべての関連データを引っ張ることになる、名簿からのすべての関連データを引っ張ることになる、gamerinfoからすべての関連データを引っ張ることになる、gamerinfo.idされますgameinfoから、platforminfoからすべての関連データを取得します。

基本的には次のように破綻:

  • gamerinfoはゲーマー基本 情報が含まれています。
  • rosterinfoは名簿 (すなわち名と名簿が に向けて目指しているゲーム)
  • 名簿が 異なる名簿へのゲーマーから実際のリンクが含まれている基本的な情報が含まれてい
  • (ゲーマーは 複数の名簿にすることができます)
  • GameInfoのがゲームの基本的な情報(すなわち 名とプラットフォーム)
  • が含まれているプラ​​ットフォームの情報は、ゲームが ある 異なるプラットフォームに関する情報が含まれています、それはゲーム トンが可能です(上で再生o複数のプラットフォームで再生することができます)

私はJOINやUNIONなどのSQLクエリには新しく、通常は複数のクエリに分割しますが、より良い方法が必要だと思っていますネットの周りを見て、私が探していたものを見つけることができなかった(あるいは、私が見ていたものを理解できなかったかもしれない)。誰かが私を正しい方向に向けることができれば、私は最も感謝しています。

答えて

3

必要なデータを段階的に照会することは何も問題ありません。 5つ以上のテーブルにあるSQLでJOINを使用する場合は、すべての重要な列に対して有用なインデックスを作成してください。また、これは重複したデータをたくさん作成する可能性があります。

gamerinfoから1レコード、gameinfoから3レコード、残りの2テーブルのうち3レコードが必要です。あなただけの必要な場合でも、

ID Col2 Col3 
1  1  1 
1  1  2 
1  1  3 
1  2  1 
... ...  ... 

はあなたがID 108回をフェッチすることを見ることができます。これは、あなたのようになります1 * 3 * 4 * 3 * 3 = 108のレコードの結果を、与えるだろうそれは一度。だから私の助言は、必要なデータを得るために、たいていは単一の単純なクエリを使うことです。

1

UNIONの必要性だけで仕事

 
SELECT gameinfo.id AS g_id, gameinfo.name AS g_name, platforminfoid.name AS p_name, platforminfoid.abbreviation AS p_abb, rosterinfo.name AS r_name 
FROM gameinfo 
LEFT JOIN platforminfo ON gameinfo.platforminfoid = platforminfo.id 
LEFT JOIN rosters ON rosters.gameinfoid = gameinfo.id 
LEFT JOIN rosterinfo ON rosterinfo.id = rosters.rosterinfoid 

WHERE gameinfo.id = XXXX 

は、このすべてのID(複数可)gameinfoidのゲームID インデックスに基づいて、ゲームに関するすべての情報を引く必要があり、platformid、rosterinfoidを助ける行う必要があり、複数のJOINはありませんオンパフォーマンス

関連する問題