2012-02-12 4 views
2

나는 웹을 수색 해왔고 너무 비슷한 것을 찾을 수 없었습니다. 내 골프 리그를위한 MYSQL 데이터베이스가 있습니다. 이 데이터베이스에서보기를 작성하여 순위를 표시해야합니다. 팀당 2 명이 있으며, '선수'의 기본 키는 'id'입니다. 각 팀원에 해당하는 팀 ID (숫자 1 - 20, 20 개 팀)가 있습니다. 기본적으로 'teamID', 'LName'(아마도 'LNameA', 'LNameB') 및 두 선수의 점수 필드의 합계를 포함하는보기가 필요합니다. 한 사람과 다른 사람의 필드를 합산 한 적이 없으며 MYSQL에서 뷰를 만들었습니다.MYSQL보기 및 요약 필드

편집 : 나는

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

같은 것을 시도하고 있지만, 각 플레이어 성을 포함 할 뷰의 기본 키로 teamID을해야하고, 자신의 포인트를 합산 한

.

+0

질문 문구가 약하지만, 때로는 표의 일부 데이터/테이블 구조를 인라인 table.column 대신 표시하는 것이 좋습니다. id.ranges ... 두 팀원이 한 줄에 있거나 팀/플레이어별로 올바르게 정규화되어 있고 플레이어의 테이블이 성을 가졌을 때 명확하지 않은 것으로 테이블의 구조를 나열 할 수 있습니까? 이름 등 아마도 쿼리는 아마도 매우 간단합니다. 그 조각들이 제공됩니다. – DRapp

+0

첫 번째 게시물은 선수들이 모두 하나의 다른 플레이어와 팀 ID를 공유하는 행입니다. 따라서 두 개의 개별 항목을 함께 그룹화 할 수 있습니다. 나는 PHP로 순위를 표시하려고 시도하고 있으며 내가 한 적이없는보기를 만드는 것이 가장 쉬운 방법이라고 생각했습니다. – Josh

답변

2

이 시도 :

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

아, 한 가지 더.

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 

당신이 더 잘 연주 할 수 있습니다 방법 : 서로 다른 분야의 선수의 이름을 갖고 싶어 당신이이 쿼리를 사용할 수 있습니다 (GROUP_CONCAT은 쉼표로 구분,하지만 여전히 하나의 필드) ","구문을 사용하지 않고 PHP에서 이름을 입력하십시오.

+1

이것은 정확히 내가 감사 할 필요가있는 것이었다. – Josh

+1

+1처럼 지나치게 복잡하지 않기 때문에 +1 –

1

테이블 구조를 이해하면 teamID에 대해 JOIN이 필요합니다. 나는 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 
); 
+0

미안하지만 나는 모스 타 코스가 속임수를 쓰지 않았다. 그래도 감사합니다. – Josh