2012-08-24 3 views
2

세부다음 정보를 1 개의 mysql 쿼리에 결합 할 수 있습니까?

나는 다음 각 테스트에서 가장 높은 점수와 가장 낮은 기간에 따라 사용자의 순위를 가지고 각 시험 시간 (기간) 시작 사이의 차이를 발견하고 중지합니다. 궁극적으로 나는 mysql에서 이것을하기 위해 PDO를 사용할 것이다. 지금까지 SQL에 대해 작업 해왔다. 지금은 꽤 가깝다고 생각하지만 확신 할 수는 없습니다. how to combine the information into one query.

(테스트되지 않은) 무엇을 했습니까?

나는 다음과 같은 테이블 내가 id 및 계산 duration와 함께 score을 얻고 싶은 내 선택 성명에서

-------------------------------------------------------------------- 
| index | id |   start   |   stop  | score| 
-------------------------------------------------------------------- 
| 1 | 23 | 2012-06-06 07:30:20 | 2012-06-06 07:30:34 | 100 | 
-------------------------------------------------------------------- 

testresults라고합니다.

아래의 쿼리를 사용하여 오늘 수행 한 테스트 기간을 확인할 수 있습니다.

SELECT TIMESTAMPDIFF(SECOND,stop,start) AS duration 
FROM testresults WHERE `start` >= DATE(NOW()) 

그런 다음 순위에 따라 결과를 정렬합니다. 순위는 점수와 기간에 따라 결정됩니다.

ORDER BY score DESC, duration ASC 

난 단지 어쩌면 100 개 항목 그래서 원하는

LIMIT 100 

질문

: 짧은 duration.I 나는 이런 식으로 뭔가에 그렇게 할 수 있다고 생각과 최고의 장소는 가장 높은 점수로 이동

위의 정보를 어떻게 하나의 쿼리에 결합 할 수 있습니까?

+1

주문 DESC에 의한 주문, 기간은 ASC LIMIT 0,100'입니까? 그것은 똑바로 본다. – Sablefoste

+0

나는 그것을 모으는 법을 모른다. 이것은 나를위한 복잡한 쿼리입니다. – TryHarder

+0

나를 비슷한 쿼리로 연결하면 아마도 그것을 해결할 수 있습니다. – TryHarder

답변

1
SELECT `id`, `score`, 
    TIMESTAMPDIFF(SECOND, start, stop) AS `duration` 
FROM `testresults` 
WHERE `start` >= DATE(NOW()) 
ORDER BY `score` DESC, `duration` ASC 
LIMIT 100; 

이것은 매우 효과적입니다. id & scoreSELECT 문에 입력해야합니다.

+0

이것은 나에게 도움이되었지만 하나의 변경으로'TIMESTAMPDIFF (SECOND, start, stop) AS duration'을 잘못 실행 한 것 같습니다. – TryHarder

+0

@moomoochoo 아! 그렇습니다, 나는 그것에 많은 생각을 기울이지 않았습니다. :) – hjpotter92

1
SELECT id, score, TIMESTAMPDIFF(SECOND,stop,start) AS duration FROM testresults 
WHERE `start` >= DATE(NOW()) ORDER BY score DESC, duration ASC LIMIT 100 

이 작동합니다 당신이 testresults FROM 기간 AS,`TIMESTAMPDIFF을 선택합니다 (SECOND, 중지, 시작), 즉 함께 WHERE '시작'> = DATE (NOW()) 모두를 넣을 때 발생하는

관련 문제