2012-02-12 67 views
2

我需要一些幫助我一直在網上衝浪,一直沒能找到太類似的東西。我的高爾夫聯盟有一個MYSQL數據庫。我需要通過從該數據庫創建視圖來顯示積分榜。每個球隊有兩個人,我在'球員'中的主鍵是'id',每個球員對應他們的隊友也有一個teamID(數值爲1 - 20,20個球隊)。基本上我需要的是一個包含'teamID',兩個球員'LName'(也許是'LNameA','LNameB')和兩個球員'積分'場的總和的視圖。我從來沒有從一個人和另一個人那裏總結出一個領域,或者在MYSQL中創建了一個視圖。MYSQL查看和總結字段

編輯:

我試圖像

CREATE 
VIEW standings1 
AS SELECT teamID, LName, points 
FROM players 

但需要teamID是其中將包含每個球員的姓氏視圖的PrimaryKey的,他們的分相加。

+0

雖然您的問題的措辭很弱,但有時候最好爲您的問題顯示一些示例數據/表結構,而不是在線table.column。 id.ranges ...你可以列出有問題的表格的結構,因爲如果兩個隊友都在一個單一的行上,或者它的每個條目的隊伍/玩家正確地規範化了,並且玩家的表格中有姓氏,名字等這個查詢可能很簡單一次提供這些作品。 – DRapp 2012-02-12 19:54:42

+0

我對第一篇博文表示歉意,球員們都有自己的排,他們與其他球員共享teamID,所以我可以嘗試將兩個單獨的條目組合在一起。我試圖用PHP展示積分榜,並認爲創建一個我從未做過的視圖將是最簡單的方法。 – Josh 2012-02-12 20:00:48

回答

2

試試這個:

create view standings as 
    select teamId, group_concat(lname separator ', ') as TeamMembers, 
    sum(points) TotalPoints from players 
    group by teamId 

哦,還有一兩件事。如果你想擁有不同領域的球員的名字(GROUP_CONCAT只是用逗號將它們分開,但它仍然是一個字段),您可以使用此查詢:

create view standings as 
    select a.teamId, a.lname as player1, b.lname as player2, 
    a.points + b.points TotalPoints 
    from players a 
    join players b ON a.teamId = b.teamId AND a.id >= b.id 
    group by a.teamId, a.id 
    having count(*) = 2 

這樣,你可以用更好的發揮PHP中的名稱無需解析「,」

+1

這正是我所需要的感謝。 – Josh 2012-02-12 20:13:40

+1

+1不像我那樣嚴重過度複雜 – 2012-02-12 21:40:06

1

如果我瞭解你的表格結構,你需要一個JOIN對錶格自己的teamID。我假設teamID是指一個團隊,而不是玩家的ID。這裏的訣竅是在相同的teamID上加入兩個表副本,但玩家ID不相等。這應該會產生每支球隊的球員。

CREATE VIEW standings AS 
(
SELECT 
    p1.teamID AS teamID, 
    p1.id AS p1id, 
    p2.id AS p2id, 
    p1.LName AS p1LName, 
    p2.LName AS p2LName, 
    p1.score + p2.score AS totalScore 
FROM 
    /* JOIN on matching teamID and non-matching player-id (so you don't get the same player twice) */ 
    players p1 JOIN players p2 ON p1.teamID = p2.teamID and p1.id <> p2.id 
); 
+0

對不起,我沒有更清楚,Mostachos做的伎倆。謝謝你。 – Josh 2012-02-12 20:14:33