我需要一些帮助,我一直在网上搜索,但却找不到太相似的东西。我的高尔夫联盟有一个MYSQL数据库。我需要通过从这个数据库创建一个视图来显示排名。每队有2个人,我在'球员'中的主键是'id',对于每个对应队友的球员,还有一个teamID(数值1 - 20,20支球队)。基本上我需要的是一个包含'teamID'的视图,两个玩家'LName'(可能是'LNameA','LNameB'),以及两个玩家'积分'字段的总和。我从来没有从一个人和另一个人那里总结一个字段,或者在MYSQL中创建了一个视图。
编辑:
我正在尝试像
这样的东西CREATE
VIEW standings1
AS SELECT teamID, LName, points
FROM players
但是需要teamID作为视图的primaryKey,它将包含每个玩家的姓氏,并且他们的点总和在一起。
答案 0 :(得分: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 :(得分:1)
如果我了解您的表格结构,那么您需要JOIN
针对表格自己的teamID
。我假设teamID
指团队,而不是玩家的身份。这里的诀窍是在同一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
);