포인트 랭킹 쿼리문 질문드립니다.
본문
$rank_rows = 100; //출력 수
$sql = " select * from {$g5['member_table']} where (1) {$sql_common} order by mb_point desc, mb_today_login desc limit {$rank_rows} ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
$rank = number_format($i + 1);
//$name = get_sideview($row['mb_id'], $row['mb_nick'], $row['mb_email'], $row['mb_homepage']);
$name = $row['mb_nick'];
$level = $row['mb_level'];
$joindate = date("y.m.d", strtotime($row['mb_datetime']));
$point = number_format($row['mb_point']);
포인트 랭킹 순서입니다.
여기에서 포인트가 있는 회원만 뽑고 싶은데 어떻게 해야 할까요? (관리자 제외)
rank_rows도 그에 맞춰서 나오게 하고 싶습니다.
!-->답변 3
$rank_rows = 100; //출력 수
$sql = " select * from {$g5['member_table']} where (1) and mb_point > 0 {$sql_common} order by mb_point desc, mb_today_login desc limit {$rank_rows} ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
$rank = number_format($i + 1);
//$name = get_sideview($row['mb_id'], $row['mb_nick'], $row['mb_email'], $row['mb_homepage']);
$name = $row['mb_nick'];
$level = $row['mb_level'];
$joindate = date("y.m.d", strtotime($row['mb_datetime']));
$point = number_format($row['mb_point']);
- 필요한 필드만 나열하면 좋습니다.
- 관리자 고유번호가 1이 아니면 mb_no>1 대신 다른 조건 넣으면 됩니다. 예) mb_level<10
$rank_rows = 10;
$sql = "SELECT mb_no, mb_id, mb_nick, mb_level, mb_point, mb_email, mb_homepage, mb_datetime
FROM {$g5['member_table']} WHERE mb_no>1 AND mb_point>0 ORDER BY mb_point DESC LIMIT {$rank_rows}";
$result = sql_query($sql);
$rows = sql_num_rows($result);
$rank = 1;
while ( $row=sql_fetch_array($result) ) {
echo $rank; // 순위 1부터 순차 증가
echo $row['mb_nick'];
echo str_replace('-', '.', substr($row['mb_datetime'], 0, 10)); // strtotime(), date() 사용보다 빠름
echo number_format($row['mb_point']);
$rank++; // 반복할 때마다 마지막에 1 증가
}
top 10 이런 식으로 뽑는다면
별도 테이블을 만드는 것이 좋습니다.
포인트 업데이트 할 때마다 이 테이블도 업데이트하는 것이 효율적입니다.
답변을 작성하시기 전에 로그인 해주세요.