for문에 대해 여쭤볼게 있습니다. > 그누4 질문답변

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누4 질문답변

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

for문에 대해 여쭤볼게 있습니다. 정보

for문에 대해 여쭤볼게 있습니다.

본문

일괄적으로 구매고객 중 일정금액이 넘으면 업데이트를 시키기 위해 아래와 같이 쿼리문을 만들었습니다. 그런데 구문이 제대로 안만들어졌는지 for문이 제대로 작동하지 않은채 회원한명만 업데이트가 된 후 업데이트가 끝나니다. 어떤게 잘못된걸까요.... 답변 좀 꼭 부탁드리겠습니다. 감사합니다.

<?
include_once("./_common.php");
$sql2  = " select mb_id from g4_member ";
$result2 = sql_query($sql2);

for ($j=0; $row2=mysql_fetch_array($result2); $j++)
{

$sql  = " select (a.od_receipt_bank + a.od_receipt_card + a.od_receipt_point) as receiptamount from yc4_order a left join yc4_cart b on (a.on_uid=b.on_uid) where mb_id = '$row2[mb_id]' ";
$result = sql_query($sql);

for ($i=0; $row=mysql_fetch_array($result); $i++)
{
    $tot_receiptamount += $row[receiptamount];

$is_admin = is_admin($row2[mb_id]);
if($is_admin == 'super') {
} else if ($tot_receiptamount > 0 && $tot_receiptamount < 300) {
mysql_query( "update $g4[member_table] set mb_level = 3 where mb_id = '$row2[mb_id]' ");             
} else if($tot_receiptamount >= 300 && $tot_receiptamount <= 1000) {
mysql_query( "update $g4[member_table] set mb_level = 4 where mb_id = '$row2[mb_id]' ");
} else if($tot_receiptamount > 1000 && $tot_receiptamount <= 3000) 
mysql_query( "update $g4[member_table] set mb_level = 5 where mb_id = '$row2[mb_id]' ");
} else if($tot_receiptamount > 3000) {
mysql_query( "update $g4[member_table] set mb_level = 6 where mb_id = '$row2[mb_id]' ");
}

}
}
?>

댓글 전체

각각의 for문에서 $row2와 $row 를 print_r2($row); 식으로 출력해보면서 확인해보심은 어떨런지요..
첫번째 for문에서는 아이디가 찍히고 두번째에서는 결제금액이 출력되겠죠.
만약에 아이디는 찍히고 금액이 안찍힌다면 조인문이 잘못됐거나 조건에 맞는 데이터가 없다라는 걸테니 테이블내 자료와 sql문을 잘 확인해보셔야겠구요..
설마 아이디가 하나밖에 안찍힌다면 회원이 한명뿐? ㄷㄷ; 그럴일은 없을테니 패스~ -ㄴ-;
그리고 if문 안에서도 확인용으로 레벨을 출력해보는것도 필요하겠군요. 실제로 update는 거기서 일어나니..

그나저나 두번째 for문, 그러니까 $row=mysql_fetch_array() 부분 위에 $tot_receiptamount=0; 을 해줘야 하지 않을까요? 안그러면 어느이후부터는 전부 레벨이 6이 될듯한..

참고로 if문은 좀 간편하게 쓰셔도 될듯하네요.
if(is_admin($row2[mb_id]) == 'super') {
} elseif($tot_receiptamount < 300) {
} elseif($tot_receiptamount <= 1000) {
} elseif($tot_receiptamount <= 3000) {
} elseif($tot_receiptamount > 3000) {
}
먼지 손님 하나 더 질문이 있습니다. 제가 $tot_receiptamount=0; 이건 빼먹고 안적었네요..
회원이 많아서 지금 돌리지못하고있는데 for문이 제대로 적용된건지 궁금하네요... 저런식으로
 하면 해당조건문에 맞는 회원들 레벨이 업데이트가 될까요? 무식질문이지만 답변 좀 부탁드립니다.ㅠ.ㅠ
얼핏 봤을때는 일단 이상은 없어보이는데 결과가 회원한명만 적용된다고 하셔서 우선 확인해보는 접근방법을 말씀드린거구요..
저 페이지가 관리자가 주기적으로 저 페이지에 들어가서 처리해주는거지요?
그럼 적어도 상단에 관리자인지 체크정도는 해주셔야 좋을듯하구요..

yc4_cart 와 꼭 조인해야 하는게 아니라면 좀 더 부하를 줄일수는 있겠네요.
모든 회원이 구매내력이 있는건 아니니 회원 전체목록을 뽑아올 필요는 없을거 같아요.

바로 구매내역과 회원을 조인해서 각 회원별 구매금액의 합과 아이디를 가져와볼게요.
다만 탈퇴회원은 제외해야 하므로 mb_level > 1 조건을 줍니다.

$sql = "select a.mb_id, sum(a.od_receipt_bank + a.od_receipt_card + a.od_receipt_point) as receiptamount from yc4_order a inner join g4_member b on (a.mb_id=b.mb_id and b.mb_level>1) group by a.mb_id ";
$result = sql_query($sql);
while($row=sql_fetch_array($result)) {
    print_r2($row);
    $tot_receiptamount = $row2['receiptamount'];
    if(is_admin($row[mb_id]) == 'super') {
    } elseif($tot_receiptamount < 300) {
        print_r2( "update $g4[member_table] set mb_level = 3 where mb_id = '$row[mb_id]' ");
    } elseif($tot_receiptamount <= 1000) {
        print_r2( "update $g4[member_table] set mb_level = 4 where mb_id = '$row[mb_id]' ");
    } elseif($tot_receiptamount <= 3000) {
        print_r2( "update $g4[member_table] set mb_level = 5 where mb_id = '$row[mb_id]' ");
    } elseif($tot_receiptamount > 3000) {
        print_r2( "update $g4[member_table] set mb_level = 6 where mb_id = '$row[mb_id]' ");
    }
}

일단 확인을 위해서 print_r2()로 출력만 해봤습니다. 정상적으로 판단되면 print_r2($row);는 지우고 sql문에 해당하는 문장은 sql_query()로 바꾸면 되겠죠.
회원과 구매내역의 분량이 많다면 sql문 제일 뒤에 limit 10 이런식으로 넣어서 우선 10개정도만 봐보는것도 괜찮겠네요.
제가 조인에는 좀 약해서 버그는 없을지 모르겠습니다.
저도 예전에 이와 비슷한 문제로 고생했었는데 먼지손님께서 아주 자세히 답글을 달아주셨네요^^ 저도 도움이되었습니다. 감사합니다.
전체 4 |RSS
그누4 질문답변 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 조회
  • 게시물이 없습니다.

회원로그인

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