1. 회원 랭킹 개요
DXCMS 관리자 패널의 [회원 랭킹] 메뉴는 회원들의 활동 지표(좋아요•스크랩•친구•게시글•댓글•링크클릭•포인트)를 집계하여 순위 형태로 시각화하는 통계 분석 도구입니다. 8개 탭으로 각 지표별 랭킹을 독립적으로 조회하거나, 종합 가중치를 적용한 통합 순위를 확인할 수 있습니다.
📌 접근 경로: 관리자 대시보드 → 회원 랭킹 (또는 URL: /admin/ranking)
1.1 화면 전체 구성
| 영역 |
설명 |
| 페이지 헤더 |
제목("회원 랭킹")과 기간 필터 버튼 4개(전체·오늘·7일·30일), 표시 수 드롭다운(10·30·50·100명) 배치. |
| 탭 메뉴 |
8개 랭킹 탭(종합·좋아요·스크랩·링크클릭·친구·게시글·댓글·포인트). 현재 탭이 흰색 배경·테두리로 강조. |
| 탭 설명 배너 |
현재 탭의 아이콘·집계 기준 설명. 종합 탭에서는 각 지표 가중치 배지가 우측에 함께 표시됩니다. |
| TOP 3 포디움 |
랭킹 데이터가 3건 이상일 때 표시. 1위(가운데 가장 높음)·2위(왼쪽)·3위(오른쪽) 시상대 형태 시각화. |
| 랭킹 테이블 |
순위·회원 정보·레벨·세부 지표(종합 탭만)·점수 컬럼. 행 클릭 시 해당 회원 관리 페이지로 이동. |
| 푸터 요약 |
"총 N명 표시"와 현재 기간 표시. |
2. 조회 필터 및 URL 파라미터
회원 랭킹 화면의 모든 필터는 URL 파라미터로 관리됩니다. 탭•기간•표시 수 변경 시 페이지가 새로고침되며 선택한 조건으로 데이터가 다시 조회됩니다.
2.1 URL 파라미터 3종
| 파라미터 |
허용 값 |
기본값 |
설명 |
| tab |
total / likes / scraps / link_clicks / friends / posts / comments / points |
total |
현재 조회 중인 랭킹 탭. |
| period |
all / today / week / month |
all |
집계 기간 필터. 포인트 탭은 기간 필터가 적용되지 않습니다. |
| limit |
10 / 30 / 50 / 100 |
30 |
표시할 최대 회원 수. |
💡 URL 직접 접근: /admin/ranking?tab=likes&period=week&limit=10 형식으로 원하는 조건을 직접 URL에 입력할 수 있습니다. 허용된 값 외의 파라미터가 입력되면 기본값으로 대체됩니다.
2.2 기간 필터 상세
| 버튼 |
SQL 조건 |
설명 및 특이사항 |
| 전체 |
(조건 없음) |
기간 제한 없이 누적 전체 데이터를 집계합니다. 가장 오래된 데이터부터 현재까지 모두 포함. |
| 오늘 |
DATE(col) = CURDATE() |
오늘 날짜(서버 기준) 생성된 활동만 집계합니다. 활동이 활발한 오늘의 상위 회원 파악에 유용. |
| 7일 |
col >= DATE_SUB(NOW(), 7 DAY) |
최근 7일(168시간) 이내 활동 집계. 주간 활성 회원 순위 확인에 적합. |
| 30일 |
col >= DATE_SUB(NOW(), 30 DAY) |
최근 30일 이내 활동 집계. 월간 활성도 분석에 활용. |
⚠️ 포인트 탭(tab=points)은 기간 필터를 지원하지 않습니다. members.point 컬럼의 현재 잔액 기준으로만 정렬되기 때문입니다. 기간 버튼을 선택해도 포인트 탭에서는 효과가 없습니다.
2.3 표시 수 드롭다운
헤더 우측의 드롭다운에서 랭킹에 표시할 최대 회원 수를 선택합니다. 변경 즉시 페이지가 새로고침되어 해당 수만큼의 상위 회원이 표시됩니다.
| 선택값 |
특징 |
| 10명 |
TOP 10만 집중 확인. 빠른 로딩. 핵심 활성 회원 파악에 적합. |
| 30명 |
기본값. 상위권 회원 전반을 확인하기에 적당한 범위. |
| 50명 |
더 넓은 범위의 활성 회원 분석. 중간 활성도 회원도 포함. |
| 100명 |
종합 랭킹의 경우 대규모 집계 연산이 발생할 수 있습니다. 데이터가 많은 사이트에서는 응답 속도가 느릴 수 있습니다. |
3. 8개 랭킹 탭 상세
회원 랭킹은 8개의 독립적인 탭으로 구성됩니다. 각 탭은 서로 다른 활동 지표를 기준으로 회원 순위를 산출합니다.
3.1 탭 종합 비교표
| 탭 |
아이콘 색상 |
단위 |
점수 계산 기준 |
집계 테이블 및 기간 필터 |
| 종합 |
주황색 |
점 |
가중치 합산 (아래 3.2절 참고) |
6개 지표 집계 후 가중치 합산. 기간 필터 적용. |
| 좋아요 |
빨간색 |
개 |
내 게시글+댓글이 받은 좋아요 수 |
likes + posts + comments JOIN. 기간: likes.created_at. |
| 스크랩 |
파란색 |
개 |
내 게시글이 스크랩된 수 |
scraps + posts JOIN. 기간: scraps.created_at. |
| 링크 클릭 |
보라색 |
회 |
내 게시글 링크의 클릭 수 |
link_clicks + post_links + posts JOIN. 기간: link_clicks.created_at. |
| 친구 |
초록색 |
명 |
나를 친구로 추가한 회원 수 |
friends WHERE type='friend' AND status=1. 기간: friends.created_at. |
| 게시글 |
인디고 |
개 |
작성한 게시글 수 |
posts WHERE status=1 AND parent_id=0. 기간: posts.created_at. |
| 댓글 |
청록색 |
개 |
작성한 댓글 수 |
comments WHERE status=1. 기간: comments.created_at. |
| 포인트 |
노란색 |
P |
현재 보유 포인트 |
members.point 현재 잔액. 기간 필터 미지원. |
3.2 종합 랭킹 가중치 공식
종합 탭(tab=total)은 6가지 활동 지표에 서로 다른 가중치를 곱하여 종합 점수를 산출합니다.
종합점수 = 좋아요×5 + 스크랩×3 + 친구×2 + 게시글×2 + 댓글×1 + 링크클릭×1
| 지표 |
가중치 |
집계 방법 |
가중치 부여 이유 |
| ❤ 좋아요 |
×5 |
게시글+댓글 좋아요 합산 |
가장 적극적인 참여 표현. 타인의 콘텐츠 가치를 인정하는 행동. |
| 🔖 스크랩 |
×3 |
게시글 스크랩 수 |
콘텐츠 재방문 의사 표현. 좋아요보다 적극적이나 빈도가 낮음. |
| 👥 친구 |
×2 |
나를 추가한 친구 수 |
커뮤니티 인맥 형성력. 사람들이 팔로우하고 싶어하는 회원. |
| 📝 게시글 |
×2 |
작성한 게시글 수 |
콘텐츠 생산 활동. 커뮤니티에 가치를 만드는 핵심 행동. |
| 💬 댓글 |
×1 |
작성한 댓글 수 |
토론 참여. 빈도가 높아 낮은 가중치 적용. |
| 🔗 링크 클릭 |
×1 |
내 게시글 링크 클릭 수 |
콘텐츠 유용성 지표. 빈도 높고 수동적이라 낮은 가중치. |
💡 종합 랭킹 집계 시 각 지표 함수를 limit=999999로 전체 데이터를 가져온 후 PHP에서 가중치를 합산합니다. 데이터가 매우 많은 사이트에서 100명 설정 시 처리 시간이 늘어날 수 있습니다.
3.3 좋아요 탭 집계 방법 (특이사항)
- 좋아요 탭은 다른 탭과 달리 두 개의 쿼리를 실행한 후 PHP에서 합산합니다.
- 게시글 좋아요: likes 테이블에서 target_type='post'인 행을 posts 테이블과 JOIN하여 게시글 작성자(posts.member_id)별 좋아요 수 집계
- 댓글 좋아요: likes 테이블에서 target_type='comment'인 행을 comments 테이블과 JOIN하여 댓글 작성자(comments.member_id)별 좋아요 수 집계
- 두 결과를 PHP 배열에서 member_id 기준으로 합산(merge)
- 합산 후 내림차순 정렬하여 limit 수만큼 슬라이스
💡 게시글에 받은 좋아요와 댓글에 받은 좋아요가 모두 합산되어 표시됩니다. 탭 설명 배너에 "내 게시글•댓글이 받은 좋아요 수"로 안내됩니다.
4. TOP 3 포디움
랭킹 데이터가 3건 이상 존재할 때 테이블 위에 시상대(포디움) 형태로 상위 3명이 시각화됩니다.
4.1 포디움 배치
| 위치 |
순위 |
시상대 높이 |
시각 요소 |
| 가운데 |
🥇 1위 |
가장 높음 (h-36) |
금색 테두리·배경(amber). 메달 이모지 🥇. 상단 여백 없음(mt-0). 이름 클릭 시 회원 관리 이동. |
| 왼쪽 |
🥈 2위 |
중간 높이 (h-28) |
슬레이트 테두리·배경. 메달 이모지 🥈. mt-8(약간 아래). |
| 오른쪽 |
🥉 3위 |
가장 낮음 (h-20) |
주황 테두리·배경. 메달 이모지 🥉. mt-14(가장 아래). |
4.2 포디움 항목 구성
| 프로필 이미지 |
profile_img가 있으면 이미지를, 없으면 이름 첫 글자(이니셜)를 표시합니다. 이미지는 data/uploads/ 경로에서 로드됩니다. |
| 이름 링크 |
클릭 시 /admin/members?search={login_id} 페이지로 이동하여 해당 회원 관리 화면을 엽니다. |
| 레벨 표시 |
이름 아래에 "Lv.N" 형식으로 레벨을 표시합니다. |
| 점수 표시 |
시상대 기둥 안에 현재 탭의 점수와 단위가 색상 강조(curMeta.color)로 표시됩니다. |
| 메달 이모지 |
이름 우측 상단에 🥇/🥈/🥉 메달 이모지가 오버레이됩니다. |
5. 랭킹 테이블
포디움 아래 전체 랭킹이 테이블로 표시됩니다. TOP 3 행은 옅은 앰버 배경(bg-amber-50/20)으로 구분됩니다.
5.1 테이블 컬럼
| 컬럼 |
내용 및 설명 |
| 순위 |
1위=🥇(금색배경), 2위=🥈(회색배경), 3위=🥉(주황배경). 4위 이후는 숫자(회색 배경). 모두 8×8 크기의 둥근 사각형 배지. |
| 회원 |
프로필 이미지(또는 이니셜) + 이름(링크) + 로그인 ID. 이름 클릭 시 /admin/members?search={login_id}로 이동. 관리자/매니저는 역할 배지(빨강/파랑) 표시. |
| 레벨 |
회색 pill 배지로 "Lv.N" 표시. 화면 너비 768px 미만에서는 숨겨집니다(hidden md:table-cell). |
| 세부 지표 (종합 탭 전용) |
종합 탭에서만 표시. 좋아요(빨강)·스크랩(파랑)·친구(초록)·게시글(인디고)·댓글(청록) 5개 컬럼. 1024px 미만에서 숨겨짐(hidden lg:table-cell). |
| [탭명] 점수 |
현재 탭 기준 점수(굵고 큰 글씨). 탭별 색상(curMeta.color)으로 강조. 천 단위 쉼표 포함. 오른쪽 정렬. |
5.2 종합 탭 세부 지표 컬럼 (데스크톱 전용)
종합 탭(tab=total) 선택 시 레벨 컬럼 오른쪽에 5개 세부 지표 컬럼이 추가로 표시됩니다. 각 지표는 해당 탭 색상으로 구분됩니다.
| 컬럼명 |
색상 |
표시 내용 |
| 좋아요 |
빨간색 |
detail.likes 값. 해당 회원이 받은 좋아요 총 수. |
| 스크랩 |
파란색 |
detail.scraps 값. 해당 회원이 받은 스크랩 수. |
| 친구 |
초록색 |
detail.friends 값. 해당 회원을 친구 추가한 회원 수. |
| 게시글 |
인디고 |
detail.posts 값. 해당 회원이 작성한 게시글 수. |
| 댓글 |
청록색 |
detail.comments 값. 해당 회원이 작성한 댓글 수. |
💡 세부 지표 컬럼은 1024px 이상의 넓은 화면(lg 브레이크포인트)에서만 표시됩니다. 관리자 패널을 좁은 화면이나 태블릿에서 접속하면 순위•회원•레벨•점수 컬럼만 표시됩니다.
5.3 회원 정보 표시
| 프로필 이미지 |
profile_img 컬럼이 있으면 이미지(9×9 둥근 사각형), 없으면 이름 첫 글자 이니셜 박스를 표시합니다. |
| 이름 (클릭 가능) |
클릭 시 /admin/members?search={login_id}로 이동합니다. 해당 회원의 관리 화면이 열립니다. |
| 로그인 ID |
이름 아래에 회색 작은 텍스트로 login_id가 표시됩니다. |
| 역할 배지 |
관리자(role=admin): 빨간색 "관리자" 배지. 매니저(role=manager): 파란색 "매니저" 배지. 일반 회원은 배지 없음. |
| 레벨 배지 |
회색 pill 형태로 "Lv.N"을 표시. 화면 너비 md(768px) 이상에서만 표시. |
6. 데이터 집계 기술 상세
회원 랭킹의 각 탭이 어떻게 데이터를 집계하는지 DB 쿼리 수준에서 설명합니다.
6.1 rk_safe_query() — 안전 쿼리 실행
모든 집계 쿼리는 rk_safe_query() 함수를 통해 실행됩니다. 이 함수는 관련 테이블이 없거나 쿼리 오류가 발생해도 빈 배열을 반환하여 페이지가 정상 표시됩니다.
| 역할 |
try-catch로 예외 처리. DB 테이블이 없거나 쿼리 실패 시 배열 대신 빈 배열([]) 반환. |
| 활용 이유 |
likes/scraps/friends/link_clicks 등 선택적 기능 테이블은 모든 환경에 없을 수 있습니다. 오류 없이 graceful하게 처리. |
6.2 집계 쿼리 참조 테이블
| 탭 |
집계 기준 컬럼 |
쿼리 상세 |
| 좋아요 |
게시글: posts.member_id 댓글: comments.member_id |
likes LEFT JOIN posts (target_type=post) + likes LEFT JOIN comments (target_type=comment). 두 결과를 PHP에서 member_id별로 합산. |
| 스크랩 |
posts.member_id |
scraps INNER JOIN posts ON scraps.post_id=posts.id WHERE posts.member_id>0. |
| 링크 클릭 |
posts.member_id |
link_clicks INNER JOIN post_links ON lc.link_id=pl.id INNER JOIN posts ON pl.post_id=p.id. |
| 친구 |
friends.target_id |
friends WHERE type='friend' AND status=1. target_id가 나를 친구로 추가한 대상. |
| 게시글 |
posts.member_id |
posts WHERE status=1 AND parent_id=0 (댓글/답글 제외). |
| 댓글 |
comments.member_id |
comments WHERE status=1. |
| 포인트 |
members.point |
members WHERE status=1 AND point>0 ORDER BY point DESC. 기간 필터 없음. |
6.3 회원 정보 일괄 로드 방식
랭킹 집계 후 회원 정보는 rk_load_members()로 한 번에 일괄 로드합니다. N+1 쿼리 문제를 방지하는 방식입니다.
- 각 탭 집계 함수에서 mid(member_id) 배열이 포함된 rankRows 반환
- rk_extract_mids()로 rankRows에서 mid 값만 추출하여 정수 배열 생성
- rk_load_members()가 IN (id1, id2, ...) 쿼리 한 번으로 모든 회원 정보를 로드
- 결과를 memberMap[mid] = {name, login_id, profile_img, level, point, role} 형태의 연관 배열로 변환
- 테이블 렌더링 시 memberMap[$mid]로 O(1) 접근
7. 회원 랭킹 활용 방법
단순한 순위 확인을 넘어 회원 랭킹을 사이트 운영에 실질적으로 활용하는 방법을 안내합니다.
7.1 활성 회원 파악 및 보상
- [종합 랭킹 + 기간: 이번 달 30일] 설정으로 이번 달 가장 활발한 회원 TOP 10 확인
- 해당 회원들에게 [포인트 관리]에서 월간 우수 회원 보상 포인트 지급
- [좋아요 + 전체 기간] 설정으로 가장 인기 있는 콘텐츠 생산자 파악
- 해당 회원들을 파워 유저 또는 매니저로 권한 승격 검토
7.2 커뮤니티 건강도 진단
| 확인 항목 |
진단 방법 |
| 콘텐츠 다양성 |
[게시글 탭]의 상위 10명이 전체 게시글의 몇 %를 차지하는지 확인. 특정 회원에 과도하게 집중되면 다양성 부족. |
| 참여 활성도 |
[댓글 탭 + 오늘] 설정으로 오늘 댓글을 가장 많이 쓴 회원 확인. 10명 이상이면 활발한 커뮤니티. |
| 콘텐츠 인기도 |
[좋아요 탭 + 7일] 로 이번 주 인기 콘텐츠 생산자 파악. 좋아요 수가 많은 회원의 콘텐츠를 메인에 노출. |
| 이탈 징후 감지 |
[종합 탭 + 전체]에서 상위권이었던 회원이 [30일] 필터에서 사라졌다면 이탈 가능성 → 재활성화 유도. |
7.3 탭별 조합 활용 예시
| 목적 |
추천 설정 |
활용 |
| 이달의 베스트 작가 선정 |
게시글 + 30일 |
이달 게시글을 가장 많이 작성한 회원. 작가 배지 또는 포인트 보상. |
| 가장 유용한 콘텐츠 작성자 |
좋아요 + 전체 |
누적 좋아요가 가장 많은 회원. 파워 유저 지정. |
| 신규 스타 회원 발굴 |
종합 + 오늘 |
오늘 활동이 폭발적인 회원. 신규 가입 후 빠르게 성장하는 회원 파악. |
| 소셜 허브 회원 파악 |
친구 + 전체 |
가장 많은 친구를 가진 회원. 커뮤니티 중심 회원으로 이벤트 앰배서더 활용. |
| 링크 성과 분석 |
링크 클릭 + 30일 |
게시글 링크가 가장 많이 클릭된 회원. 광고·제휴 콘텐츠 제작자 후보. |
| 포인트 적립 현황 |
포인트 + 표시100명 |
현재 포인트 상위 회원 전반 확인. 포인트 시스템 활성화 여부 판단. |
8. 빈 상태 및 예외 처리
8.1 데이터가 없을 때
rankRows가 비어있으면(활동 데이터 없음, 관련 테이블 없음 등) 포디움과 테이블 대신 빈 상태 화면이 표시됩니다.
| 표시 내용 |
현재 탭 아이콘(투명도 20%) + "랭킹 데이터가 없습니다." + "활동 데이터가 쌓이면 자동으로 표시됩니다." 안내. |
| 발생 원인 1 |
해당 지표의 관련 테이블이 DB에 없는 경우. rk_safe_query()가 예외를 잡아 빈 배열 반환. |
| 발생 원인 2 |
선택한 기간(오늘/7일/30일)에 활동 데이터가 없는 경우. |
| 발생 원인 3 |
포인트 탭에서 point>0인 활성 회원이 없는 경우. |
8.2 회원 정보 없음 처리
rankRows에 mid가 있으나 memberMap에 해당 회원 정보가 없는 경우(탈퇴•삭제 회원) 기본값으로 처리합니다.
| 이름 |
"알수없음"으로 표시. |
| login_id |
빈 문자열. |
| level |
1로 표시. |
| profile_img |
빈 문자열. 이니셜 박스를 표시하려 하지만 이름이 "알수없음"이므로 "알" 표시. |
| role |
"member"로 처리하여 역할 배지 미표시. |
9. 전체 사용 절차
9.1 기본 랭킹 조회
- 관리자 대시보드 → [회원 랭킹] 메뉴 클릭
- 기본 화면(종합 탭•전체 기간•상위 30명)이 자동 표시됨
- 상단 탭에서 확인할 랭킹 유형 선택 (종합/좋아요/스크랩/링크클릭/친구/게시글/댓글/포인트)
- 헤더의 기간 버튼(전체/오늘/7일/30일) 클릭하여 집계 기간 설정
- 드롭다운에서 표시 수 선택 (10•30•50•100명)
- 포디움에서 TOP 3 시각 확인 후 테이블에서 전체 순위 확인
- 특정 회원의 이름 클릭 시 해당 회원 관리 화면으로 즉시 이동
9.2 월간 우수 회원 보상 프로세스
- [회원 랭킹] → 종합 탭 → 30일 기간 → 상위 10명 설정
- TOP 10 회원의 이름•ID 메모
- [포인트 관리] 메뉴로 이동
- 각 회원 ID를 지급 폼에 입력하여 포인트 지급 (예: +1000P, 메모: "4월 월간 우수 회원")
- 필요하면 [회원 관리]에서 해당 회원의 권한을 매니저로 승격
10. 자주 묻는 질문 (FAQ)
Q1. 특정 탭의 랭킹 데이터가 표시되지 않습니다.
A. 해당 탭이 참조하는 DB 테이블이 없거나 데이터가 없는 경우입니다. 예: 좋아요 탭이 비어있으면 likes 테이블이 없거나 좋아요 데이터가 없는 것입니다. rk_safe_query() 함수가 예외를 처리하여 빈 상태로 표시합니다. 테이블 존재 여부를 DB에서 확인하세요.
Q2. 포인트 탭에서 기간 필터가 작동하지 않습니다.
A. 포인트 탭(tab=points)은 members.point 컬럼의 현재 잔액을 기준으로 정렬하므로 기간 필터를 지원하지 않습니다. 기간 버튼을 선택해도 포인트 탭에서는 변화가 없습니다. 기간별 포인트 획득 순위가 필요하면 point_log 테이블 기반의 별도 기능이 필요합니다.
Q3. 종합 랭킹이 느립니다.
A. 종합 랭킹은 6개 지표를 각각 집계한 후 PHP에서 합산합니다. 데이터가 많으면 쿼리 실행 시간이 늘어납니다. 표시 수를 10명으로 줄이거나, 기간 필터(오늘/7일)를 사용하면 쿼리 대상 데이터가 줄어 빠르게 조회됩니다. 데이터가 매우 많으면 관련 테이블에 인덱스(created_at, member_id)를 추가하세요.
Q4. 포디움이 표시되지 않습니다.
A. 랭킹 데이터가 3건 미만이면 포디움이 표시되지 않습니다. 2명 이하의 데이터가 있거나 데이터가 전혀 없으면 포디움 없이 테이블만 표시됩니다.
Q5. 관리자•매니저도 랭킹에 포함됩니까?
A. 네, 포함됩니다. 활성(status=1) 회원이면 role에 관계없이 집계됩니다. 목록에서 관리자/매니저는 역할 배지로 구분됩니다.
Q6. 랭킹 순위가 실시간으로 갱신됩니까?
A. 네. 페이지에 접근할 때마다 DB에서 실시간으로 집계합니다. 별도 캐싱이 없으므로 항상 최신 데이터를 반영합니다. 단, 대용량 데이터에서는 응답 속도가 느릴 수 있습니다.
Q7. 좋아요 탭에서 댓글 좋아요도 합산됩니까?
A. 네. 좋아요 탭은 게시글에 받은 좋아요와 댓글에 받은 좋아요를 모두 합산하여 표시합니다. 탭 설명 배너에 "내 게시글•댓글이 받은 좋아요 수"로 명시되어 있습니다.
11. 용어 정리
| 용어 |
설명 |
| tab |
랭킹 유형 URL 파라미터. total/likes/scraps/link_clicks/friends/posts/comments/points. |
| period |
기간 필터 URL 파라미터. all/today/week/month. 포인트 탭에서 미적용. |
| limit |
표시 수 URL 파라미터. 10/30/50/100. 기본값 30. |
| rankRows |
각 탭 집계 함수가 반환하는 배열. [{mid, score, detail}] 형태. |
| mid |
rankRows 항목의 회원 ID 키. |
| score |
rankRows 항목의 집계 점수. 탭별 단위(개/회/명/점/P)가 다름. |
| detail |
종합 탭에서만 사용. {total, likes, scraps, friends, posts, comments, link_clicks} 세부 수치. |
| memberMap |
rk_load_members()가 반환하는 회원 정보 연관 배열. memberMap[id] = {name, login_id, ...}. |
| rk_safe_query() |
try-catch 래핑된 안전 쿼리 실행 함수. 예외 시 빈 배열 반환. |
| rk_period_sql() |
기간 파라미터에 따라 SQL WHERE 조건 문자열을 반환하는 함수. |
| rk_get_total() |
종합 랭킹 집계 함수. 6개 지표를 가중치로 합산하여 반환. |
| rk_get_likes() |
좋아요 랭킹. 게시글+댓글 좋아요를 각각 쿼리 후 PHP에서 합산. |
| rk_get_scraps() |
스크랩 랭킹. scraps JOIN posts 단일 쿼리. |
| rk_get_link_clicks() |
링크 클릭 랭킹. link_clicks JOIN post_links JOIN posts 3중 JOIN. |
| rk_get_friends() |
친구 랭킹. friends WHERE type='friend' AND status=1. |
| rk_get_posts() |
게시글 랭킹. posts WHERE status=1 AND parent_id=0. |
| rk_get_comments() |
댓글 랭킹. comments WHERE status=1. |
| rk_get_points() |
포인트 랭킹. members WHERE status=1 AND point>0 ORDER BY point DESC. |
| rk_medal() |
순위 번호를 받아 배지 배경색·글자색·이모지 배열을 반환하는 함수. |
| weights |
종합 랭킹 가중치 배열. {likes:5, scraps:3, friends:2, posts:2, comments:1, link_clicks:1}. |
| 포디움(Podium) |
TOP 3 회원을 시상대 형태로 시각화하는 UI 영역. |
| tabMeta |
각 탭의 label/icon/color/unit/desc 메타 정보를 담은 PHP 배열. |