开发者

Querying specific data from 3 tables

I'm having trouble coming up with a query that returns the player's id, name along with the player's first match date, matchid and opponent.

I want the same information for player's last match as well.

`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-0开发者_运维问答5 | 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

Where matchid is a foreign key to the id in table matches.

I tried several queries but I may be approaching it the the wrong way. How can I write a way to get the information I want?


Information about LEFT JOIN: 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

I haven't tested this select.

P.S. You should use foreign key for players table too with player_id in playermatchscores.

After the changes in question:


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

For the last match replace ASC with DESC.

P.S. This is not the best way to do it but it should work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜