데이터베이스에 저장된 값들을 각각 합산하여 표시하는 방법에 대해 질문드립니다.
본문
현재 데이터테이블에 입금액 / 출금액 두가지가 있는데, 해당두 건을 계산해서 잔액을 표시하고 싶은 상태입니다.
하단의 데이터를 참고하면,
4번째 100000원 입금 / 0원 출금 인 경우 4번째 잔액부분에 100000원을 표현하고
3번째 0원 입금 / 10000원 출금 인 경우, 3번째 잔액부분에 4번째의 잔액과 계산하여 90000원을 표시하고,
2번째 0원 입금 / 25000원 출금 인 경우, 2번째 잔액부분에 3번째의 잔액과 계산하여 65000원을 표시하고,
1번째 50000원 입금 / 0원 출금 인 경우, 1번째 잔액부분에 3번째의 잔액과 계산하여 115000원을 표시하는 형태를 진행하고 싶은데, 어떤방식으로 해야할지 의문이네요 ㅠㅠ
데이터베이스 컬럼명은 입금액 : insert1 / 출금액 : insert2 / 잔액 : sum
입니다.
참고할만한 소스코드가 있을지 질문드려 봅니다.
$sql1 = "SELECT sum(insert1) FROM addForm";
$result = $db->query($sql1);
$add= $result->fetch_array(MYSQLI_ASSOC);
echo ' 입금액 합계 : ' . $add['sum(insert1)'];
합계를 구하는건 이런식으로 하는건 알고 있는데, 질문드린것처럼 하는 방식이 참 어렵네요..ㅠ
!-->답변 2
금액의 입/출이 발생할때
발생시점별로 입금+, 출금-를 하고 잔액을 해당시점에 같이 기록해주어야 계산로직을 돌리지 않을수있습니다.
컬럼이 3개라고 하신것처럼 insert1, insert2, sum 에 각각 기록을 해주어야죠
참고로 컬럼명이 sum/add 등과 같은 예약어또는 함수명과 같거나 유사하면 다르게 지정하는게 좋습니다.오작동되거나 오해를 수반하기때문에 최초코딩한 사람도 나중에 본인의 코드도 이해를 못하게됩니다.
위의 내용처럼 컬럼이 존재할때는
발생일자를 반드시 기록해두어야 합니다.
시분초, 혹은 그보다 더 정밀할수록 좋습니다.
입금액 합계를 sum(insert1)으로 하면 잔액은 최종잔액만 나옵니다.
최악의 결괄르 도출할수있습니다.
$sql = "select insert1, insert2 from addForm order by idx ";
// idx는 기본키가 있다는가정하에 명시한것이고, 그게 아니라면 reg_date같은 기록일시를 사용하는게 좋습니다.
그리고, 누구의 금액정보인지를 알아야 기록을 하겠죠
임의로 컬럼에 user_id컬럼과 $사용자ID가 있다고 가정하고
다시 코드를 구성해보면
//$sql1 = "SELECT sum(insert1) FROM addForm";
$sql1 = "select insert1, insert2 from addForm where user_id = '{$사용자ID}' order by reg_date";
$balance = 0;
$result = $db->query($sql1);
while ($add= $result->fetch_array(MYSQLI_ASSOC)) {
$balance += $add['insert1'] - $add['insert2'];
echo '입금 : '.$add['insert1']." , ";
echo '출금 : '.$add['insert2']." , ";
echo ' 입금액 합계 : ' . $balance."<br>";
}
일단은 전체값을 가져와서 이런식으로 구성하면 되지 않을까 생각됩니다.
!-->이거 함수가 객체기반이네요? 그누보드 내장 함수 아닌가봐요?
일단 쿼리로 해결 하기보다는 페츠 배열로 받아와서 += 으로 해서 합산하면되지 않을까요?