2011-01-17 6 views
0

나는 걸어 다니는 것을 기록하는 테이블이있는 '워킹 챌린지'를 위해 웹 사이트를 만들었습니다.mysql SUM 값에 도달 할 때까지

대상은 2105 마일 (뉴캐슬, 영국에서 이스탄불)입니다.

홈 페이지에는 현재 가장 많은 마일을 차지한 5 개 팀을 보여주는 리더 보드가 있습니다.

나는 이것을 실현하려 다음 쿼리를 사용하고 있습니다 :

SELECT 
    SUM(log.distance) AS l, 
    log.*, 
    team.* 
FROM 
    team 
RIGHT JOIN 
    log ON team.teamname = log.teamname        
GROUP BY 
    log.teamname 
ORDER BY 
    l DESC 

그러나 내가이 리더가 아니라 멀리 걸어 사람보다 먼저 완료 5 개 팀을 보여주고 싶어요. 즉, 2105 마일에 처음 도착한 팀.

현재 웹 사이트는

+1

로그 및 팀 테이블의 DDL을 게시하십시오. 당신의 질문은 당신이 저장 한 타임 스탬프를 알지 못하면 대답 할 수 없습니다. (그리고 어떤 링크도 맹목적으로 클릭하지 않으면 용서해야합니다) * –

+1

어떻게 시간을 추적하고 어떤 테이블에 보관합니까? –

+0

현재 로그 테이블에서 간단한 시간 소인 (CURRENT_TIMESTAMP)을 사용하여 시간을 추적합니다. –

답변

3

here 테이블에 널 (NULL) completedDate 필드를 추가하고 누군가가 경주를 완료 할 때마다 그것을 채울 볼 수 있습니다. 완료 날짜순으로 주문하십시오.

다른 방법으로 먼저 완료 한 사람은 주문할 방법이 없습니다. 당신이 매번 팀이이 걸어 마일의 번호를 입력 현재 시간을 가져옵니다 타임 스탬프 필드를 가지고 있기 때문에

+1

로그 테이블에 타임 스탬프가있는 경우 방법이 있다고 생각합니다. 이 사이트는 이미 생방송으로 작동하고있는 것으로 보이며 데이터베이스는 꽤 잘 채워진 것처럼 보입니다. 그래서 나는 새로운 필드를 추가하기에는 너무 늦었다 고 생각한다. –

+0

아, 그래. 나는 링크를 클릭하지 않았고 어떤 사람들은 이미 그 도전을 끝냈다는 것을 알아 차렸다. 타임 스탬프가 존재하면 가능합니다. 그러나 여전히 열을 만든 다음 현재 로그의 타임 스탬프에서 채우는 스크립트를 작성합니다. 그런 다음 향후 모든 완료에 대해 새 필드를 설정하고 사용하십시오. –

+0

멋지다, 나는 그것을 할 것이다, 도전은 한 번에 16 주 동안 달린다. 그래서 이것은 다음에 주위에 일해야한다. 건배 –

0

,이 같은 domething 할 수있는 :

SELECT 
     SUM(log.distance) AS l, 
     MAX(log.timestamp) AS t, 
     log.*, 
     team.* 
    FROM 
     team 
    RIGHT JOIN 
     log ON team.teamname = log.teamname       
    GROUP BY 
     log.teamname 
    WHERE 
     l >= 2105 
    ORDER BY 
     t ASC 

이는 경우에만 작동합니다 명심하십시오 팀이 목표 거리를 완료 한 후 추가 마일을 추가하는 것을 허용하지 않습니다. 목표를 완료 한 후 추가 마일을 추가 할 수 있다면 알려주세요. 다른 검색어를 찾으려고합니다.

+0

안녕하세요, 팀은 여전히 ​​합계에 도달 한 후에도 수 마일을 추가 할 수 있습니다. ( –

+0

로켓 로니 :이 경우에는 척 솔루션이 가장 간단하다고 생각합니다. SQL에서 결과가 합산 될 때까지 조건이 충족되지만 SQL 전문가가 아니기 때문에 Chucks 솔루션을 사용합니다. :) –

관련 문제