일정기간 또는 최근 한달간에만 발생된 포인트 순위를 알 수 없을까요? > 그누3질답

그누3질답

일정기간 또는 최근 한달간에만 발생된 포인트 순위를 알 수 없을까요? 정보

그누보드 일정기간 또는 최근 한달간에만 발생된 포인트 순위를 알 수 없을까요?

본문

안녕하세요.
일정 기간동안 발생된 포인트 점수로 순위를 확인할 방법이 없을까요?
그러니까 2005년1월21일부터 2005년2월20까지 포인트 점수를 올린 사람들을 이 기간동안에만 올린 포인트 점수만을 적용시켜 순위를 알 수 있는 방법이 없을까요?
이것이 어렵다면 최근 한달간 발생한 포인트 점수만을 적용하여 포인트 순위를 확인하는 방법은 없을까요?
http://www.sir.co.kr/?doc=bbs/gnuboard.php&bo_table=qa&sselect=concat%28wr_subject%2Cwr_content%29&stext=%C6%F7%C0%CE%C6%AE%C1%B6%C8%B8&soperator=0&page=1&wr_id=14354&ca_id=
에 있는 "최근 한달간 포인트 누적순위 구하기"는 1년전에 발생된 포인트 점수도 적용이 되는데 누적된 포인트는 적용이 않되고 한달 사이에만 발생된 포인트점수만을 적용시켜서 포인트순위를 적용시킬 수는 없을까요?
예를들어 매달마다 포인트점수를 많이 올린 사람 3명에게 순위에 따라 다르게 선물을 주려고 할 경우
첫번째달에서 A가 10000점, B가 5000점, C가 1000점, D가 50점이고
두번째달에는 A가 500점, B가 600점, C가 700점, D가 800점이라고 가정하면
첫번째달에는 물론 A가 1위, B가 2위...의 순서가 되지만
두번째달에는 D가 1위, C가 2위... 이런 식으로 되도록 할려고 하는 것입니다.
이전에 올린 포인트점수를 함께 적용시킨다면 누적된 점수로 인해 두번째달에도 A가10500점, B가 5600점...으로 순위가 잘못될 것입니다.
그러므로 다음달에는 이전에 올린 점수들은 무시하고 최근 한달간에 추가로 올린 점수들만 적용되도록 할려고 하는 것입니다.
그러니까 첫째달에 10000점으로 1위를 했던 A가 두번째달에 활동이 저조하여 500점밖에 추가를 못했으니 두번째달에는 추가된 500점만이 적용되어 순위가 뒤로 가고 첫째달에 50점이었던 D가 두번째달에는 활동이 활발하여 800점이라면 한달간 올린 포인트 800점만을 적용하여 순위가 1위로 올라가도록 적용할려고 하는 것입니다.
어떻게 하면 이런식으로 최근 한달동안에 발생된 포인트점수만을 적용해서 포인트 순위를 알 수 있을까요?
2004년12월21일부터 2005년1월20까지 이런식으로 일정기간을 정하여 확인할 수 있다면 더욱 좋겠고요.
좋은 답을 부탁드립니다.
감사합니다.
  • 복사

댓글 전체

시간이 많이 지났는데 아무런 답이 없네요.
바빠서 그런신거 같은데 다른 고수님분께서 도와주시면 않될까요.
php를 잘 모르는 분들에게는 너무 어려워요.
어디서 어떻게 하는 것인지 모르겠네요?
http://www.sir.co.kr/?doc=bbs/gnuboard.php&bo_table=tiptech&sselect=wr_subject&stext=.0%B9%F6%C0%FC+%C0%FC%C3%BC%C8%B8%BF%F8+%C6%F7%C0%CE%C6%AE%C1%B6%C8%B8+%C0%D4%B4%CF%B4%D9&soperator=0&page=3&wr_id=904&ca_id=
에서의 경우처럼 어디서 어떻게 적용해야 하는지 결과 화면 그림까지는 필요없겠지만 적용하는 단계의 내용만이라도 자세히 알 수는 없겠는지요?
시간이 없어서.. 해당 쿼리만 만들어논것인데..

조금 시간이 나시는 분들 계시면.. 해당 팁테크로 만들어주심이 ㅠㅠ;

제가 시간이 나는데로 팁테크로 올려드리도록 하겠습니다.
아.. 출력하기 위하여 AS 구문을 붙여야 합니다.

=================================================================
 SELECT *, SUM(po_point) AS to_point, b.mb_name, b.mb_point
 FROM gb_point a  LEFT JOIN gb_member b ON (a.mb_id=b.mb_id)
 WHERE a.po_datetime > 20050201 and a.po_datetime < 20050301
 GROUP BY po_point DESC
 LIMIT 5
=================================================================

출력할때는 아마도 $result[to_point] 가 되겠죠?
현재 포인트 합산은 이러한 형태로 되어있습니다.
=================================================================================
 SELECT *, b.mb_name, b.mb_point
 FROM $cfg[table_point] a  LEFT JOIN $cfg[table_member] b ON (a.mb_id=b.mb_id)
 ORDER BY po_id DESC
=================================================================================

여기에서 해당 기간을 where 절로 추가해 주시고..
GROUP BY로 해당 po_point를 합산하여 구하면 됩니다.
==================================================================
 SELECT *, SUM(po_point), b.mb_name, b.mb_point
 FROM gb_point a  LEFT JOIN gb_member b ON (a.mb_id=b.mb_id)
 WHERE a.po_datetime > 20050201 and a.po_datetime < 20050301
 GROUP BY po_point DESC
==================================================================

제싸이트에서 해보니 잘되네요..

그리고 SELECT된 SUM(po_pint) 값을  Wile문으로 정렬 하면  해당 날짜에 마추어서 순위가 나오겠죠?

만일 해당 등수를 1~5등까지 짜르고 싶다면 마지막에  LIMIT 0,4 를 추가하여 사용하시면 됩니다.
=================================================================
 SELECT *, SUM(po_point), b.mb_name, b.mb_point
 FROM gb_point a  LEFT JOIN gb_member b ON (a.mb_id=b.mb_id)
 WHERE a.po_datetime > 20050201 and a.po_datetime < 20050301
 GROUP BY po_point DESC
 LIMIT 0,4
=================================================================

아.. 한가지 저는 SQL문을 직접 적었는데.. 해당 변수명으로 기입해주셔야 합니다.
============================================
 gb_point = $cfg[table_point] ;
 gb_member = $cfg[table_member] ;
 20050214 = 시작하는 DATE 생성한 변수값 ;
 20050216 = 끝나는 DATE 생성한 변수값 ;
============================================
© SIRSOFT
현재 페이지 제일 처음으로