2012-07-18 5 views
0

각 테이블의 데이터에 액세스하기 위해 3 개의 테이블을 조인하려고합니다. 이 경우 메인 테이블은 Stats 테이블이 될 것입니다. 따라서 NextOpponent를 얻으려면 Players 테이블에 액세스해야하며, NextOpponent에서 계산을 실행하려면 Defense 테이블에 액세스해야합니다. 모든 아이디어는 이들 중 3 가지를 모두 달성해야합니다.MySQL을 통해 3 개의 테이블 가입

현재 SQL 문 : (현재 중복을 인쇄의 끝없는 루프)

$query="SELECT * FROM Stats 
    INNER JOIN Defense ON Stats.Team = Defense.Team 
    INNER JOIN Players ON Defense.Team = Players.team"; 

여기 내 데이터베이스 구조입니다.

Players 
-PID (Primary) 
-Name 
-NextOpponent 

Stats 
-PID (Primary) 
-Name 
-Touchdowns 
-Receptions 
-etc.... 

Defense 
-Team (Unique) 
-Points 

그래서 내 의도 된 출력은 다음과 같습니다

Chris Johnson 
Next Opponent: IND 
Defense Points: 100 

업데이트 : 지금은 방어 포인트를 에코 그러나 실제로 플레이어가있는 팀 방어의 포인트를 반환 필드에 액세스 할 수 있습니다 그들의 다음 상대는 방어 포인트가 아닙니다. 이처럼

답변

1

어떻게 GROUP BY p.id 사용에 대한?

SELECT * FROM Stats s JOIN Players p ON p.PID = s.PID JOIN Defense d ON d.Team = p.upcoming GROUP BY p.PID

+0

이 도움말은 반복 문제를 해결했습니다. 그러나 완전한 대답은 아닙니다. – jsheffers

+0

이것을 시도하십시오 :'SELECT * FROM 통계 s 조인 플레이어 p ON p.id = s.id JOIN 방어 d ON d.team = p.NextOpponent GROUP BY p.id; ' – Horen

+0

이것은 귀하의 도움에 감사드립니다. 'SELECT * FROM Stats s JOIN 플레이어 p p.PID = s.PID JOIN 국방 d ON d.Team = p.upcoming GROUP BY p.PID' 귀하의 답을 추가 할 수 있습니까? – jsheffers

1

:

SELECT * FROM Stats s, Defense d, Players p 
WHERE s.Team = d.Team AND d.Team = p.team; 
+0

아직 루프 문제가 있습니다. 그러나 필요한 모든 필드에 대한 액세스 권한을 제공합니다. – jsheffers

+1

같은 것을 계속 사용한다면'GROUP BY'를 사용할 수도 있습니다. – RTB

+0

또한 이것을 사용하고 방어 지점에 접근하려고 시도하면 실제로 플레이어가 다음 상대방 방어 지점이 아닌 팀 방어 지점을 반환합니다. – jsheffers

0

SQL 끝없는 데이터 세트를 반환하지 않습니다

UPDATE이 최종 쿼리이었다. 루프 내에서 다음 레코드를 읽을 수 있도록 코드를 살펴 보는 것이 좋습니다.