안녕하세요.
개인으로 게임개발을 하고있습니다!
랭킹시스템이 필요해서 googleGame 랭킹 시스템을 사용했었는데,
좀더 다양한 랭킹이 필요하게되서요;;
랭킹을 가져오는 종류가 한개 테이블에서 다양해서 row당 rank정보를 입력할 수 없는 환경입니다..
1. 한게임당 스코어가 하나씩 추가됩니다.
2. 현재 아래 테이블상에서 unique한 것은 없습니다.
user_id | score | regdate |
1 | 50 | 20150331090500 |
2 | 30 | 20150331101511 |
1 | 20 | 20150331111511 |
3 | 10 | 20150331122315 |
2 | 50 | 20150331155743 |
2 | 70 | 20150331160125 |
1 | 95 | 20150331172213 |
1 | 80 | 20150331185575 |
3 | 75 | 20150331195612 |
이런식으로 테이블이 짜여있다고 가정할 때,
1. regdate에 의한 오늘의 순위, 일주일간의 순위, 한달간의 순위 등으로 표현됩니다. (이 외에도 더 많은 분류가 있어서 따로 테이블을 만들기엔 불가능할것같아요 ㅠ)
2. 페이지별로 랭킹을 score 내림차순하여 user_id로 그룹해서 보여줍니다.
3. 순위정보를 불러온 유저의 현재 순위를 알아옵니다.
여기서 1,2번은 해결을 했는데요..;;
3번이 문제에요;
현재 하루에 1만회에 가까운 스코어가 기록이 되고 있는 상황이고, 추 후 더 올라갈것으로 보입니다.
저는 랭킹 리스트를 inner join으로 가져와서 where user_id를 하고난 뒤,
몇번째 row였는지 알아내면 될 것이라고 생각했는데.
몇번째 row에서 데이터를 가져왔는지에대한 정보가 없더라고요 ㅠㅠ
지금 랭킹 리스트를 limit를 이용해서 페이지단위로 가져오고있는데,
이걸 전체 리스트를 가져와서 몇번째 유저가 맞는지 일일이 검사하는 것도, 퍼포먼스가 상당할것같고요...
혹시 다른 방법 없을까요?
P.S. 개발을 쉽게 하려고 사이트(XE)에 있는 DB모듈을 사용중인데, $count := 1; 이라던가 그런건 안되는것같아요ㅠ