2011-01-26 4 views
0

플레이어의 date, matchidopponent과 함께 플레이어의 id, name을 반환하는 쿼리가 필요합니다.3 테이블의 특정 데이터 쿼리

플레이어의 마지막 경기에도 동일한 정보를 원합니다. matchid 테이블 matchesid에 외래 키입니다

`players` 
id | name 

    1 | playername10 
    2 | playername22 
    3 | playername33 
    4 | playername45 
    5 | playername55 

`matches` 
    id | gamedate | opponent 

1 | 2011-01-01 | opponent1 
2 | 2011-01-02 | opponent2 
3 | 2011-01-03 | opponent3 
4 | 2011-01-04 | opponent4 
5 | 2011-01-05 | opponent5 


`playermatchscores` 
id | matchid |  player | goals 

1 | 1  | playername10 | 1 
2 | 1  | playername22 | 2 
3 | 2  | playername10 | 1 
4 | 1  | playername33 | 1 
5 | 3  | playername45 | 2 
6 | 4  | playername55 | 1 
7 | 2  | playername55 | 1 
8 | 3  | playername22 | 2 
9 | 5  | playername55 | 1 

.

몇 가지 쿼리를 시도했지만 잘못된 방식으로 접근하고있을 수 있습니다. 원하는 정보를 얻는 방법을 쓰려면 어떻게해야합니까? LEFT에 대한

답변

0

정보 가입 : http://www.w3schools.com/sql/sql_join_left.asp

 

SELECT players.id, MAX(matches.gamedate) AS first_match, MIN(matches.gamedate) AS last_match 
FROM playermatchscores 
LEFT JOIN players ON players.player = playermatchscores.player 
LEFT JOIN matches ON matches.id = playermatchscores.matchid 
GROUP BY players.player 
 

것은 내가이 선택 테스트하지 않았습니다.

P. playermatchscores에서 player_id와 함께 플레이어 테이블에도 외래 키를 사용해야합니다. 문제의 변경 후

:

 

SELECT players.*, matches.*, 
FROM playermatchscores 
LEFT JOIN players ON players.name = playermatchscores.player 
LEFT JOIN matches ON matches.id = playermatchscores.matchid 
ORDER BY matches.gamedate ASC 
WHERE players.id = 3 
LIMIT 1 
 

마지막 경기 DESC와 ASC를 교체합니다.

P. 이것은 최선의 방법은 아니지만 작동해야합니다.

+0

두 개의 쿼리에서 수행해야하므로 질문을 편집했습니다. 내 편집을 참조하십시오. 나는 또한 플레이어 ID를 통해 플레이어를 찾고있다. 그래서 나는'where players.id = 3'을 어딘가에 사용하고 있습니다. – Tek

+0

새로운 것을 시도하십시오;) – Trac3

+0

왜 이것이 최선의 방법이 아닙니까? – Tek