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]' ");
}
}
}
?>
<?
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) {
}
첫번째 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문이 제대로 적용된건지 궁금하네요... 저런식으로
하면 해당조건문에 맞는 회원들 레벨이 업데이트가 될까요? 무식질문이지만 답변 좀 부탁드립니다.ㅠ.ㅠ
회원이 많아서 지금 돌리지못하고있는데 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개정도만 봐보는것도 괜찮겠네요.
제가 조인에는 좀 약해서 버그는 없을지 모르겠습니다.
저 페이지가 관리자가 주기적으로 저 페이지에 들어가서 처리해주는거지요?
그럼 적어도 상단에 관리자인지 체크정도는 해주셔야 좋을듯하구요..
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개정도만 봐보는것도 괜찮겠네요.
제가 조인에는 좀 약해서 버그는 없을지 모르겠습니다.
저도 예전에 이와 비슷한 문제로 고생했었는데 먼지손님께서 아주 자세히 답글을 달아주셨네요^^ 저도 도움이되었습니다. 감사합니다.