재질문 누적 포인트 구하기 질문입니다.(레벨아이콘때문) > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

재질문 누적 포인트 구하기 질문입니다.(레벨아이콘때문) 정보

재질문 누적 포인트 구하기 질문입니다.(레벨아이콘때문)

본문

안녕하세요

기존 포인트로 레벨 아이콘을 자동 붙이는 소스입니다.



function get_member_level($mb_point)
{
    global $g4;

    $s = "";
    $point = $mb_point;

    if ($point < '1000') {
        $point = "1000";
    }

    $level = (int)($point / 1000);
    if ($level > '75') {
        $level = "75";
    }

    $no = sprintf("%03d", $level);

    return "<img src='$g4[path]/img/l/{$no}.gif' align='absmiddle' border='0' title='레벨 {$level} / ".number_format($mb_point)."점'>";
}


 회원 레이어 (회원 자동 아이콘 쓸때)
function get_sideview($mb_id, $name="", $email="", $homepage="")
{
    global $config;
    global $g4;

    $email = base64_encode($email);
    $homepage = set_http($homepage);

    $name = preg_replace("/\&#039;/", "", $name);
    $name = preg_replace("/\'/", "", $name);
    $name = preg_replace("/\"/", "&#034;", $name);
    $title_name = $name;

    if ($mb_id) {
        $tmp_name = "<span class='member'>$name</span>";

        if ($config['cf_use_member_icon']) {
            $mb_dir = substr($mb_id,0,2);
            $icon_file = "$g4[path]/data/member/$mb_dir/$mb_id.gif";

            //if (file_exists($icon_file) && is_file($icon_file)) {
            if (file_exists($icon_file)) {
                //$size = getimagesize($icon_file);
                //$width = $size[0];
                //$height = $size[1];
                $width = $config['cf_member_icon_width'];
                $height = $config['cf_member_icon_height'];
                $tmp_name = "<img src='$icon_file' width='$width' height='$height' align='absmiddle' border='0'>";

                if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름
                    $tmp_name = $tmp_name . " <span class='member'>$name</span>";
            }
        }
        $title_mb_id = "[$mb_id]";
    } else {
        $tmp_name = "<span class='guest'>$name</span>";
        $title_mb_id = "[비회원]";
    }

    // 레벨 아이콘
    if ($mb_id) {
        $level = get_member($mb_id);
        $tmp_level = get_member_level($level['mb_point']);
    } else {
        $tmp_level = get_member_level(0);
    }

    return "<a href=\"javascript:;\" onClick=\"showSideView(this, '$mb_id', '$name', '$email', '$homepage');\" title=\"{$title_mb_id}{$title_name}\">$tmp_level $tmp_name</a>";
}




하지만 포인트를 많이 사용한 회원은

레벨이 갑자기 팍 떨어지게 됩니다.

따라서 현재 포인트가 아닌, 누적 포인트로 레벨 아이콘을 붙이게 하려고 합니다.

$level['mb_point'] 대신 누적포인트를 쓰려면?

누적 포인트(-값이 없는 +만 합계) 어떻게 구할 수 있나요?

일일히 계산해서 새 필드(예:mb1)에 넣어줘야 하는건지요?

댓글 전체

아마 포인트 차감제외하고 구하는 방법은 g4포인트 테이블에서 검색을 하는 방법밖에는
없는거 같군요?
그렇다면 너무나 부하가 걸릴것 같은데..

포인트를 넣어줄때 (차감될때는 제외) 회원 여분 필드에 계속 더하면 될 것 같은데...
문제는 기존 회원입니다.. 일단 지금의 포인트필드를 복사 한 다음에..
그다음에 포인트 인서트함수를 수정 해서 여분 필드에 계속 더하게 하고,
그 값으로 레벨 아이콘을 다는 방법이 있겠군요

에휴..
다음 코드를 응용해보세요.
아마 insert_point() 함수에 넣어두고 포인트 전체합과 양의 값인 포인트 합을 각각 구해놓도록 하면 될 것 같네요.

$temp = sql_fetch("select sum(po_point) as sum from `$g4[point_table]` where mb_id = '$mb_id' AND po_point > 0");
echo $temp[sum];
말러님 답변 감사합니다.

포인트 테이블을 보니까 회원이 많아지고, 포인트 내역이 많아질수록 부하가 너무 많아질 것 같은데
어떤가요?

게시판에 직접 적용하기 위해서 회원 아이디 일일히 출력시마다 계산하는 방법 이 되어버려서
훗날 엄청난 부하를 가져올것 같은데..

이외에는 회원여분필드를 활용하는 방법밖에 없겠지요?

그런데 기존 회원때문에 위의 방법을 추가해서 여분필드로 복사를 일일히 해줘야 할것 같습니다.

이 작업을 위의 소스로 참고해서 할 수 있는 방법은 없을까요?

음..

INSERT INTO TEMP (mb_id) SELECT (mb_id) FROM g4_member WHERE mb_id

INSERT INTO TEMP ( mb1 ) select sum(po_point) from g4_point where mb_id AND po_point > 0"

INSERT INTO g4_member ( mb_1) SELECT (mb_1) FROM temp WHERE mb_id

이렇게 하면 될까요?;;;

그다음 insert_point 함수에

// 포인트 mb_1에 UPDATE
$sql = " update $g4[member_table] set mb_9 = '$point' where mb_id = '$mb_id' ";
sql_query($sql);
 
을 추가 하면.. 될것 같으데 위의 sql문이 맞는 건지 ㅠ.ㅠ
저도 이 기능이 정말 필요했던건데요 이소스를 어디에 넣으면 되는건가요?

저는 기존회원업데이트는 필요없고요 앞으로 적립되는 포인트만 누적시키면 될꺼 같아요
전체적으로 정리 해 보겠습니다.


기존 회원 누적포인트 mb_9필드에 넣기


1. temp_point 테이블을 만듭니다.
2. 필드를 두개 만듭니다.
mb_id : varchar 255
mb_9: int
3.
INSERT INTO temp_point ( mb_id, mb_9 ) select mb_id,sum(po_point) from g4_point where mb_id = g4_point.mb_id and g4_point.po_point > 0 group by mb_id

4.
Update g4_member set mb_9 = ( select mb_9 from temp_point where  mb_id = g4_member.mb_id )



앞으로 적립되는 포인트만 누적시키려면,

회원 여분 필드인 mb_9를 이용한다는 가정하에
다음과 같이 하면 됩니다.

lib/common.lib.php

에서 inser_point 함수를 찾아

다음과 같이 추가 합니다.
(return 1; 전에 추가)

    // 포인트 누적의 합을 구하고
    $sql = " select mb_9 from $g4[member_table] where mb_id = '$mb_id' ";
    $row = sql_fetch($sql);
    $point_acum = $row[mb_9]+$point;
   
   
    // 포인트 mb_9 에 UPDATE//
    $sql = " update $g4[member_table] set mb_9 = '$point_acum' where mb_id = '$mb_id' ";
    sql_query($sql);

그러면 앞으로 포인트는 mb_9 에 무조건 + 포인트만 합쳐지게 됩니다.
포인트는 유일하게 답변 달아주신 말러님꼐 드렸습니다.
말러님 감사합니다. 오토스크랩 잘 쓰고 있습니다~~ 네이버에 파일 업로드 성공했어요
다음하구 티스토리 파일업로드는 도저히 못건드리겠요~~ 꼭 다시 오토스크랩 관심 돌아오시면 해주세요~~
다른 소스도 많이 많이 감사합니다~~
그누커뮨에 자주 가고 있습니다~
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT