회원 포인트를 계정별 부분합으로 보여주기 관련 질문 정보
회원 포인트를 계정별 부분합으로 보여주기 관련 질문관련링크
본문
회원 보유 포인트를 포인트 계정과목 별 부분합을 계산해서 페이지에 보여 주는 프로그램을 만들어 봤습니다. 그런데 화면에 정상적으로 나타나지 않는데 에러 부분을 지적해 주시면 감사하겠습니다.
참고로 저는 point테이블(mysql)의 po_rel_action을 '계정과목'으로 사용하고 있습니다.
부분합 함수 return 값을 받는 부분과 이를 이중 배열 변수로 받은 것, 리스트를 만드는 반복문을 눈여겨 봐주세요. 여기서 무슨 에러를 낸 듯해서요.
우선 point 부분합을 내는 함수
// 개인 계정별 재산 읽어오기
function get_point_byacct($mb_id, $opt='')
{
if ($opt == 1) //수입
{
$add = " and po_point > 0 ";
}
if ($opt == -1) //지출
{
$add = " and po_point < 0 ";
}
$sql = "select sum(po_point) as sum, count(po_point) as cnt, po_rel_action as acct
from g4_point where mb_id = '$mb_id'
$add
group by po_rel_action
order by sum desc ";
$row = sql_fetch($sql);
return $row;
}
다음은 page에서 목록을 뿌려주는 스킨 화일에서
<tr>
<td width="30" height="25" align="center"><img src="<?=$member_skin_path?>/img/arrow_01.gif" width="7" height="5"></td>
<td>재산</td><td><a href="#" onclick="acc_open();">순자산액 <?=display_point($mb[mb_point])?>,000</a>
<!-- <? if($member[mb_id] == $mb[mb_id]) { ?> -->
<span style="font-size:10px;color:#666666;">*계정과목을 클릭하면 자세한 내용이 나옵니다.</span>
<div id="acc_view" style="display:none;height:auto;margin-top:5px;">
<style>
.header { font-weight:bold; background: #efefef;}
.title { font-weight:normal; background: #ffffff; text-align:center;}
.amount { text-align:right; margin-right:15px;}
</style>
<table border="0" cellpadding="5" cellspacing="1" bgcolor="#cccccc" width="98%" class="amount">
<tr bgcolor="#ffffff" class="header" align="center">
<td width="20%" rowspan='2'>계정과목</td>
<td width="30%" colspan='2'>수 입</td>
<td width="30%" colspan='2'>지 출</td>
<td width="20%" rowspan='2'>잔 액<br>금액(v천)</td>
</tr>
<tr bgcolor="#ffffff" class="header" align="center">
<td width="10%">건수</td>
<td width="20%">금액(v천)</td>
<td width="10%">건수</td>
<td width="20%">금액(v천)</td>
</tr>
<?
$income_all = get_point_sum($mb[mb_id], '1');
$expense_all = get_point_sum($mb[mb_id], '-1');
$balance_all = $income_all + $expense_all;
$income = get_point_byacct($mb[mb_id], '1');
$expense = get_point_byacct($mb[mb_id], '-1');
$balance = get_point_byacct($mb[mb_id]);
for ($i=0; $i < count($income[sum]); $i++) {
?>
<tr bgcolor="#ffffff" align="center">
<td width="20%"><?=$income[acct][$i]?></td>
<td width="10%"><?=$income[cnt][$i]?></td>
<td width="20%"><?=$income[sum][$i]?></td>
<td width="10%"><?=$expense[cnt][$i]?></td>
<td width="20%"><?=$expense[sum][$i]?></td>
<td width="20%"><?=$balance[sum][$i]?></td>
</tr>
<? } ?>
<tr bgcolor="#ffffff" align="center">
<td width="20%">합 계</td>
<td width="10%"></td>
<td width="20%"><?=number_format($income_all)?></td>
<td width="10%"></td>
<td width="20%"><?=number_format($expense_all)?></td>
<td width="20%"><?=number_format($balance_all)?></td>
</tr>
</table>
</div>
<!-- <? } ?> -->
</td>
</tr>
참고로 해당 홈페이지는 아래 링크를 달아 놓았습니다.
참고로 저는 point테이블(mysql)의 po_rel_action을 '계정과목'으로 사용하고 있습니다.
부분합 함수 return 값을 받는 부분과 이를 이중 배열 변수로 받은 것, 리스트를 만드는 반복문을 눈여겨 봐주세요. 여기서 무슨 에러를 낸 듯해서요.
우선 point 부분합을 내는 함수
// 개인 계정별 재산 읽어오기
function get_point_byacct($mb_id, $opt='')
{
if ($opt == 1) //수입
{
$add = " and po_point > 0 ";
}
if ($opt == -1) //지출
{
$add = " and po_point < 0 ";
}
$sql = "select sum(po_point) as sum, count(po_point) as cnt, po_rel_action as acct
from g4_point where mb_id = '$mb_id'
$add
group by po_rel_action
order by sum desc ";
$row = sql_fetch($sql);
return $row;
}
다음은 page에서 목록을 뿌려주는 스킨 화일에서
<tr>
<td width="30" height="25" align="center"><img src="<?=$member_skin_path?>/img/arrow_01.gif" width="7" height="5"></td>
<td>재산</td><td><a href="#" onclick="acc_open();">순자산액 <?=display_point($mb[mb_point])?>,000</a>
<!-- <? if($member[mb_id] == $mb[mb_id]) { ?> -->
<span style="font-size:10px;color:#666666;">*계정과목을 클릭하면 자세한 내용이 나옵니다.</span>
<div id="acc_view" style="display:none;height:auto;margin-top:5px;">
<style>
.header { font-weight:bold; background: #efefef;}
.title { font-weight:normal; background: #ffffff; text-align:center;}
.amount { text-align:right; margin-right:15px;}
</style>
<table border="0" cellpadding="5" cellspacing="1" bgcolor="#cccccc" width="98%" class="amount">
<tr bgcolor="#ffffff" class="header" align="center">
<td width="20%" rowspan='2'>계정과목</td>
<td width="30%" colspan='2'>수 입</td>
<td width="30%" colspan='2'>지 출</td>
<td width="20%" rowspan='2'>잔 액<br>금액(v천)</td>
</tr>
<tr bgcolor="#ffffff" class="header" align="center">
<td width="10%">건수</td>
<td width="20%">금액(v천)</td>
<td width="10%">건수</td>
<td width="20%">금액(v천)</td>
</tr>
<?
$income_all = get_point_sum($mb[mb_id], '1');
$expense_all = get_point_sum($mb[mb_id], '-1');
$balance_all = $income_all + $expense_all;
$income = get_point_byacct($mb[mb_id], '1');
$expense = get_point_byacct($mb[mb_id], '-1');
$balance = get_point_byacct($mb[mb_id]);
for ($i=0; $i < count($income[sum]); $i++) {
?>
<tr bgcolor="#ffffff" align="center">
<td width="20%"><?=$income[acct][$i]?></td>
<td width="10%"><?=$income[cnt][$i]?></td>
<td width="20%"><?=$income[sum][$i]?></td>
<td width="10%"><?=$expense[cnt][$i]?></td>
<td width="20%"><?=$expense[sum][$i]?></td>
<td width="20%"><?=$balance[sum][$i]?></td>
</tr>
<? } ?>
<tr bgcolor="#ffffff" align="center">
<td width="20%">합 계</td>
<td width="10%"></td>
<td width="20%"><?=number_format($income_all)?></td>
<td width="10%"></td>
<td width="20%"><?=number_format($expense_all)?></td>
<td width="20%"><?=number_format($balance_all)?></td>
</tr>
</table>
</div>
<!-- <? } ?> -->
</td>
</tr>
참고로 해당 홈페이지는 아래 링크를 달아 놓았습니다.
댓글 전체

return $row;
==> return $row[sum]; 인듯하네요
==> return $row[sum]; 인듯하네요
답변 감사합니다. 총합을 구하는 함수 get_point_sum()에서는 returm $row[sum]으로 이미 하고 있습니다.
부분합 구하는 함수 get_point_byacct()를 하나 더 만들어 놓고 여기서 return $row라고만 한 이유는 $row[sum], $row[cnt],$row[acct]를 한번에 다 써 먹을려는 의도에서 그리 해 본 것입니다. (그런데 이게 욕심인가...)
즉 리스트는 $row[acct][$i], $row[cnt][$i], $row[sum][$i], 뮈 이런 식으로요.
부분합 구하는 함수 get_point_byacct()를 하나 더 만들어 놓고 여기서 return $row라고만 한 이유는 $row[sum], $row[cnt],$row[acct]를 한번에 다 써 먹을려는 의도에서 그리 해 본 것입니다. (그런데 이게 욕심인가...)
즉 리스트는 $row[acct][$i], $row[cnt][$i], $row[sum][$i], 뮈 이런 식으로요.
return $row;로 받아서 $row[sum], $row[cnt], $row[acct] 세개로 한꺼번에 써먹는 방법이 없다면 함수를 세게 만들어 [예를 들어 get_sum_byacct(), get_cnt_byacct(), get_eachacct()]를 만들고 각각의 return 값으로 위의 세개를 받는 방식으로 해 봐야 할 것 같은데 그 방법밖에는 없는가요?