MySQL 4.0.22 입니다.
Table 구성이
varchar(20) f_id // member id (중복)
int(11) f_value // point
int(11) f_date // timestamp
이렇습니다.
여기에서 조건의 따라 소팅된 값을 구하고 싶습니다.
1. 월간으로 조회시 월간순으로 출력하되 년간의 값이 나와야 함(월간에 포함되지 않은 회원도 포함이 되어야 함)
2. 년간으로 조회시 년간순으로 출력하되 월간의 값이 나와야 함
----------------------------------------------
순위 | 회원아이디 | 월간 | 년간
----------------------------------------------
공통 : f_id 별로
1. f_date 가 2008-01-01 ~ 2008-12-31 까지의 기간동안 f_value 합계(년간)
2. f_date 가 2008-12-01 ~ 2008-12-31 까지의 기간동안 f_value 합계(월간)
$s_year = 1199113200; // 2008-01-01
$e_year = 1230695999; // 2008-12-31
$s_month = 1228057200; // 2008-12-01
$e_month = 1230695999; // 2008-12-31
// 정렬 조건
if(월간조회면) $order by = 'month_value';
else $order by = 'year_value';
질의할 시간값과 정렬 조건을 위와 같이 구해 놓고
SELECT
f_id,
if(f_date BETWEEN $s_year AND $e_year, SUM(f_value), 0) AS year_value,
if(f_date BETWEEN $s_month AND $e_month, SUM(f_value), 0) AS month_value
FROM
table_name
GROUP BY f_id
ORDER BY $order_by DESC
이렇게 쿼리를 작성하였는데 년간은 구해지는데
월간이 구해지지 않습니다.
년간으로 조회를 하면 년간으로 소팅이 되면서 해당회원들의 월간합계가 구해져야 하고
월간으로 조회를 하면 월간으로 소팅이 되면서 해당회원들의 년간합계가 구해지고 월간에 없는 회원들도 년간은 나타나도록 하는..
이런 조건의 질의를 어찌 구성해야 하는지요?
|