2011-01-26 10 views
0

date,matchidおよびopponentのように、プレーヤーの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.S.あなたは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.S.これは最善の方法ではありませんが、うまくいくはずです。

+0

おそらく2つのクエリでそれを行う必要があるので、私は質問を編集しました。私の編集を見てください。私はまた、プレーヤーIDでプレーヤーを探しています。ですから、私は 'WHERE players.id = 3'をクエリのどこかに使っています。 – Tek

+0

新しいものを試してください;) – Trac3

+0

なぜこれを行うのが最善の方法ではありませんか? – Tek

関連する問題