2011-01-09 3 views
0

자, 하나의 변수를 기반으로 정보를 가져와야하는 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는 게임 (즉, 이름 및 플랫폼)
  • 플랫폼 정보는 게임 가 연주하는 다른 플랫폼에 대한 정보가 포함되어 있습니다에 대한 기본 정보가 포함되어 있습니다 (이것은 게임 t 가능합니다 o 여러 플랫폼에서 재생할 수 있습니다.)

저는 JOIN 및 UNION과 같은 SQL 쿼리에 새로운 것이 많습니다. 일반적으로 여러 쿼리로 구분할 수 있지만 더 좋은 방법이 있어야한다고 생각합니다. 그물 주위를 보면서 나는 내가 무엇을 찾고 있는지를 발견 할 수 없었다. 누구든지 올바른 방향으로 나를 가리킬 수 있다면 가장 감사 할 것입니다. 단지 여러 UNION에 대한 필요가 없습니다

답변

3

필요한 데이터를 단계별로 쿼리하는 데는 아무런 문제가 없습니다. 5 개 이상의 테이블에서 JOIN을 사용하는 경우 모든 중요한 열에 유용한 인덱스가 있어야합니다. 또한 많은 중복 데이터를 생성 할 수 있습니다.

gamerinfo에서 1 레코드, gameinfo 3 개, 나머지 4 개 테이블 중 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

이 도움이 될 모든 아이디 (들) gameinfoid, platformid, rosterinfoid에 게임 ID를 기반으로 색인을 게임에 대한 모든 정보를 가져해야

 
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 

작업을해야 조인 on 성능

관련 문제