불러온 변수의 사칙연산 값을 다른 변수 값으로 저장하는 방법?
본문
며칠을 고민하다 질문드립니다.
매년 8시간의 의무교육시간이 있는 교육사이트를 운영중에 있습니다.
가입년도부터 현재년도까지의 교육이수 현황을 아래와 같이 보여주려 합니다.
'교육1'과 '교육2'는 각각 다른 게시판 table의 wr_10의 값을 불러와서 적용하고 있습니다.
여기서 제가 궁금한 것은 표의 가장 오른쪽에 있는 '잔여시간'의 data를 변수에 담아
다음년도에서의 '전년도 미이수시간(B)'에 표시되게끔 하고 싶은데요...
(ex. 2020년도의 잔여시간을 2021년의 '전년도 미이수시간(B)'에 표시되게끔..)
table의 데이타가 아닌 불러온 변수들의 덧셈, 뺄셈의 값을 다음년도에 표시되게끔 하려면 어떻게 해야할까요?
혹, 제가 참고할 만한 자료가 있으면 부탁드리겠습니다.
※ 참고로, 년도별 '교육 이수시간(D)'의 값은 '의무교육시간 합계(C)"의 값을 초과할 수 없습니다.
답변 4
테스트를 해보지는 못해서.. 해보시고 오류나면 말씀하세요..
작은 연도부터 계산해서 저장을 하고.. 전년도 데이터를 불러오면 됩니다.
<?
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
include_once('./_common.php');
$que = sql_fetch("SELECT * FROM g5_write_member where mb_id = '$mb_id' ORDER BY wr_id DESC");
$join_y = date("Y", strtotime($que['wr_2']));
$year = date("Y", G5_SERVER_TIME);
?>
<div>
<table width="100%">
<tr>
<td colspan="6"><h4><b>■ 교육 이수 현황</b></h4></td>
<td colspan="5" align="right" style="line-height:100%;font-size:9pt;"></td>
</tr>
<tr><td colspan="11" height="2" bgcolor="red"></td></tr>
<tr align='center' height="25" style="line-height:100%;font-size:9pt;background-color:#efefef;">
<td width="10%" rowspan="2" style="border-right: 1px solid black;border-bottom: 1px solid #e4e4e4;">년도</td>
<td width="45%" colspan="3" style="border-bottom: 1px solid #e4e4e4; border-right: 1px solid black;">의무교육 시간</td>
<td width="45%" colspan="3" style="border-bottom: 1px solid #e4e4e4; border-right: 1px solid black;">교육이수시간</td>
<td width="10%" rowspan="2" style="border-bottom: 1px solid #e4e4e4;">잔여시간(E)=(C)-(D)</b></td>
</tr>
<tr align='center' height="50" style="line-height:110%;font-size:9pt;background-color:#efefef;">
<td width="15%" style="border-right: 1px solid #e4e4e4;border-bottom: 1px solid #e4e4e4;">교육시간<br>(A)</td>
<td width="15%" style="border-right: 1px solid #e4e4e4;border-bottom: 1px solid #e4e4e4;">전년도<br>미이수시간(B)</td>
<td width="15%" style="background-color:#ffff99; border-right: 1px solid black;border-bottom: 1px solid #e4e4e4;"><b>합계<br>(C)=(A)+(B)</b></td>
<td width="15%" style="border-right: 1px solid #e4e4e4;border-bottom: 1px solid #e4e4e4;">교육1</td>
<td width="15%" style="border-right: 1px solid #e4e4e4;border-bottom: 1px solid #e4e4e4;">교육2</td>
<td width="15%" style="background-color:#ffff99; border-right: 1px solid black;border-bottom: 1px solid #e4e4e4;"><b>합계(D)<br>= 교육1+교육2</b></td>
</tr>
<tr><td colspan="8" height="1" bgcolor="#efefef"></td></tr>
<?
$year_edu = 8; //연도별 기본 교육시간(A)
for($i=$join_y; $i <= $year; $i++){
// 교육이수시간
$isu_01_8 = sql_fetch("select sum(wr_10) as wr_10_sum from g5_write_edu_01 where mb_id = '$mb_id' and wr_2 = '$i' and wr_13 = '이수'"); //교육1 '이수'일 경우 8시간 교육이수
$isu_01_4 = sql_fetch("select sum(wr_10) as wr_10_sum from g5_write_edu_01 where mb_id = '$mb_id' and wr_2 = '$i' and wr_13 = '수료'"); //교육1 '수료'일 경우 4시간 교육이수
$isu_02_8 = sql_fetch("select sum(wr_10) as wr_10_sum from g5_write_edu_02 where mb_id = '$mb_id' and wr_2 = '$i' and wr_13 = '이수'"); //교육2 '이수'일 경우 8시간 교육이수
$isu_02_4 = sql_fetch("select sum(wr_10) as wr_10_sum from g5_write_edu_02 where mb_id = '$mb_id' and wr_2 = '$i' and wr_13 = '수료'"); //교육2 '수료'일 경우 4시간 교육이수
$isu_tot1[$i] = $isu_01_8['wr_10_sum'] + ($isu_01_4['wr_10_sum']/2); //교육1의 총 이수시간
$isu_tot2[$i] = $isu_02_8['wr_10_sum'] + ($isu_02_4['wr_10_sum']/2); //교육2의 총 이수시간
$isu_tot_i = $isu_01_8['wr_10_sum'] + ($isu_01_4['wr_10_sum']/2) + $isu_02_8['wr_10_sum'] + ($isu_02_4['wr_10_sum']/2); //연도별 총 교육이수시간의 합
$duty_time = $year_edu + $isu_not_i[$i-1];
$isu_hap = $isu_tot_i > $duty_time ? $duty_time : $isu_tot_i; //총 교육이수시간이 해당년도 의무교육시간 총합을 넘을 경우 의무교육시간 표시
// 연도별 교육 미이수시간
$isu_not_i[$i] = $duty_time - $isu_hap;
}
for($i=$year; $i >= $join_y; $i--){
?>
<tr align="center" height="40">
<td style="border-right: 1px solid black;"><?php echo $i; ?>년</td>
<td style="border-right: 1px solid #efefef;"><?php echo $year_edu; ?></td><!-- 연간 의무교육시간-고정 8시간 -->
<td style="border-right: 1px solid #efefef;"><?php echo $isu_not_i[$i-1]; ?></td><!-- 전년도 미이수시간 -->
<td style="background-color:#ffff99;border-right: 1px solid black;"><b><?php echo ($year_edu + $isu_not_i[$i-1]);?></b></td><!-- 당해년도 총 의무시간 = 기본 8시간 + 전년도 미이수 시간 -->
<td style="border-right: 1px solid #efefef;"><?php echo $isu_tot1[$i];?></td> <!-- 교육1의 총 이수시간 -->
<td style="border-right: 1px solid #efefef;"><?php echo $isu_tot2[$i];?></td> <!-- 교육2의 총 이수시간 -->
<td style="border-right: 1px solid #efefef;"><?php echo $isu_hap ;?></td>
<td style="color:black;font-weight:bold;"><?php echo $isu_not_i[$i];?></td>
</tr>
<tr><td colspan="8" height="1" bgcolor="#efefef"></td></tr>
<?php } ?>
</table>
</div>
계산식은 이미 다 나와있어서.. 그걸 물어보는 것 같지는 않고..
지금 연도가 반대로 되서 계산이 어려우신것 같은데..
query 문으로 데이터를 연도가 작은 순으로 불러와서 연도별 배열에 값을을 넣어주고..
아래에 출력할때는 연도가 큰 순서대로 해주면 어렵지 않을 겁니다.
이미 아실지도 모르지만 self join 사용하시면 될 듯합니다.
전체 내용을 몰라 힌트만 드리자면
Select a.수강시간-b.이수시간 from
Tbl a left or inner join Tbl b
On a year=b.year+1
Where ...
g5_write_member g5_write_edu_01
이 두 테이블 용도가 어떻게 다른가요?