2016-07-27 37 views
-1

我有兩個表,一個叫玩家,一個叫匹配確定比賽獲勝者並加入名字表

球員表包含2列:ID,名稱

比賽表包含5列:PLAYER1,player2,goalsforplayer1,goalsforplayer2,matchid

尋找合適的查詢來獲取名稱(不是球員ID)和比賽結果,理想情況下比較Goalforplayer1和goalsforplayer2以獲得每場比賽的勝者或平局。基本上製作一個結果列表。

是這樣的可能使用mysql查詢?

+0

更改匹配表設計,似乎是違反正常化標準。 – Jordon

+0

@ShivaShinde這個設計是好的 – Strawberry

+0

如果下面的答案之一回答你的問題,這個網站的工作方式的作品,你會「接受」的答案,更在這裏:[*當有人回答我的問題,我應該做什麼?* ](http://stackoverflow.com/help/someone-answers)。但前提是你的問題確實得到了回答。如果不是,請考慮在問題中添加更多詳細信息。 – FrankerZ

回答

0

你應該使用兩個內部聯接的球員

select 
    b.name as nameplayer1 
, c.name as nameplayer2 
, a.goalsforplayer1 
, a.goalsforplayer2 
, a.matchid 
from matches as a 
inner join players as b on a.player1 = b.id 
inner join players as c on a.player2 = c.id 
0

這應該是你在找什麼(爲了讓玩家列表,它們的總比賽結果),並應指導您正確的方向:

SELECT p.*, 
    (COUNT(CASE WHEN m1.goalsforplayer1 > m1.goalsforplayer2 THEN 1 ELSE NULL END) + 
    (COUNT(CASE WHEN m2.goalsforplayer2 > m2.goalsforplayer1 THEN 1 ELSE NULL END) 
    ) AS wins 
FROM players p 
INNER JOIN matches m1 ON p.id = m1.player1 
INNER JOIN matches m2 ON p.id = m2.player2 
GROUP BY p.id 

加入對matches表,並由ID分組。使用聚合函數(COUNT)來獲得玩家贏得的總數。如果你想繪製,只需修改查詢。

如果你正在尋找簡單的結果(從每邊播放器),然後使用此:

SELECT p1.name AS player1, p2.name AS player2, m.goalsforplayer1, m.goalsforplayer2, m.matchid 
FROM matches m 
INNER JOIN players p1 ON p1.id = m.player1 
INNER JOIN players p2 ON p2.id = m.player2