2013-12-13 3 views
0

두 개의 MYSQL 쿼리를 하나로 결합하려고합니다. 내가 원하는 것은 매일 추가 된 첫 번째 행과 마지막 행을 선택하고 그 날의 첫 번째 열에서 그 날의 마지막 열을 뺀 결과를 출력하는 것입니다. 이것이 그날이 게임에서 XP의 순익을 얻는 것입니다.2 개의 MYSQL 쿼리를 단일 쿼리로 결합하기

다음은 두 가지 쿼리입니다. 유일한 차이점은 DESC와 ASC가 날짜를 정렬하는 것입니다. 내가 서로 빼기 할 데이터베이스의 열은 "XP"

$query = mysql_query(" 

       SELECT * FROM (SELECT * FROM skills WHERE 
       userID='$checkID' AND 
         skill = '$skill' AND 
         date >= ".$date." 
       ORDER BY date DESC) as temp 
       GROUP BY from_unixtime(date, '%Y%m%d') 


       "); 

       $query2 = mysql_query(" 

       SELECT * FROM (SELECT * FROM skills WHERE 
       userID='$checkID' AND 
         skill = '$skill' AND 
         date >= ".$date." 
       ORDER BY date DESC) as temp 
       GROUP BY from_unixtime(date, '%Y%m%d') 


       "); 
+1

두 쿼리 모두 'DESC'를 사용합니다. 그러나 나는 그들이 당신이 생각하는대로한다고 생각하지 않습니다. 'GROUP BY'는 각 그룹의 첫 번째 행을 선택할 필요가 없습니다. – Barmar

답변

0
SELECT FROM_UNIXTIME(date, '%Y%m%d') AS YYYYMMDD, MAX(xp)-MIN(xp) AS xp_gain 
FROM skills 
WHERE userID = '$checkID' 
AND skill = '$skill' 
AND date >= $date 
GROUP BY YYYYMMDD 

입니다 이것은 시작과 끝을 찾기 위해 시간을 사용하지 않도록 XP는 항상 증가한다고 가정 값. 마지막 행을 반환하는 쿼리와

SELECT first.YYYYMMDD, last.xp - first.xp 
FROM (subquery1) AS first 
JOIN (subquery2) AS last 
ON first.YYYYMMDD = last.YYYYMMDD 

매일의 첫 번째 행을 반환하는 쿼리와 subquery1를 교체하고 subquery2 :

즉 올바른 가정이 아닌 경우는, 당신이 원하는 것은이 같은 것입니다 매일의. 질문에 게시 한 쿼리는이 작업을 수행하지 않지만 그룹 당 최고 또는 최저 행을 얻는 방법을 설명하는 많은 질문이 있습니다.

+0

첫 번째 행을 자정이 아니라 새벽 3시에 가져와야한다고 가정하면 첫 번째 쿼리가 완벽하게 작동한다고 생각합니다. –

+0

'GROUP BY (date + 180) % 86400'을 사용하여 오전 3 시부 터 2시 59 분 59 분까지 범위를 일 단위로 그룹화 할 수 있습니다. – Barmar

+0

흠. 작동하지 않는 것 같습니다. | –

관련 문제