재질문 누적 포인트 구하기 질문입니다.(레벨아이콘때문) 정보
재질문 누적 포인트 구하기 질문입니다.(레벨아이콘때문)
본문
안녕하세요
기존 포인트로 레벨 아이콘을 자동 붙이는 소스입니다.
하지만 포인트를 많이 사용한 회원은
레벨이 갑자기 팍 떨어지게 됩니다.
따라서 현재 포인트가 아닌, 누적 포인트로 레벨 아이콘을 붙이게 하려고 합니다.
$level['mb_point'] 대신 누적포인트를 쓰려면?
누적 포인트(-값이 없는 +만 합계) 어떻게 구할 수 있나요?
일일히 계산해서 새 필드(예:mb1)에 넣어줘야 하는건지요?
기존 포인트로 레벨 아이콘을 자동 붙이는 소스입니다.
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("/\'/", "", $name);
$name = preg_replace("/\'/", "", $name);
$name = preg_replace("/\"/", """, $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_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문이 맞는 건지 ㅠ.ㅠ
포인트 테이블을 보니까 회원이 많아지고, 포인트 내역이 많아질수록 부하가 너무 많아질 것 같은데
어떤가요?
게시판에 직접 적용하기 위해서 회원 아이디 일일히 출력시마다 계산하는 방법 이 되어버려서
훗날 엄청난 부하를 가져올것 같은데..
이외에는 회원여분필드를 활용하는 방법밖에 없겠지요?
그런데 기존 회원때문에 위의 방법을 추가해서 여분필드로 복사를 일일히 해줘야 할것 같습니다.
이 작업을 위의 소스로 참고해서 할 수 있는 방법은 없을까요?
음..
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문이 맞는 건지 ㅠ.ㅠ
좀 도와주세요 ㅠ.ㅠ
안돼네요;;
안돼네요;;
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
로 한 후
로 한 후
저도 이 기능이 정말 필요했던건데요 이소스를 어디에 넣으면 되는건가요?
저는 기존회원업데이트는 필요없고요 앞으로 적립되는 포인트만 누적시키면 될꺼 같아요
저는 기존회원업데이트는 필요없고요 앞으로 적립되는 포인트만 누적시키면 될꺼 같아요
밑에 달았습니다..
Update g4_member set mb_9 = ( select mb_9 from temp_point where mb_id = g4_member.mb_id )
로 해결했습니다...
사투 끝에;;; 아 이거 원...
로 해결했습니다...
사투 끝에;;; 아 이거 원...
전체적으로 정리 해 보겠습니다.
기존 회원 누적포인트 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 에 무조건 + 포인트만 합쳐지게 됩니다.
기존 회원 누적포인트 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 에 무조건 + 포인트만 합쳐지게 됩니다.
포인트는 유일하게 답변 달아주신 말러님꼐 드렸습니다.
말러님 감사합니다. 오토스크랩 잘 쓰고 있습니다~~ 네이버에 파일 업로드 성공했어요
다음하구 티스토리 파일업로드는 도저히 못건드리겠요~~ 꼭 다시 오토스크랩 관심 돌아오시면 해주세요~~
다른 소스도 많이 많이 감사합니다~~
그누커뮨에 자주 가고 있습니다~
말러님 감사합니다. 오토스크랩 잘 쓰고 있습니다~~ 네이버에 파일 업로드 성공했어요
다음하구 티스토리 파일업로드는 도저히 못건드리겠요~~ 꼭 다시 오토스크랩 관심 돌아오시면 해주세요~~
다른 소스도 많이 많이 감사합니다~~
그누커뮨에 자주 가고 있습니다~
아 정말 감사합니다 ㅠㅠ 성공했습니다