테스트 사이트 - 개발 중인 베타 버전입니다

데이터베이스에 저장된 값들을 각각 합산하여 표시하는 방법에 대해 질문드립니다. 채택완료

끄끄 2년 전 조회 2,400

현재 데이터테이블에 입금액 / 출금액 두가지가 있는데, 해당두 건을 계산해서 잔액을 표시하고 싶은 상태입니다.

 

하단의 데이터를 참고하면,

 

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

입니다.

 

참고할만한 소스코드가 있을지 질문드려 봅니다.

 

</p>

<p>$sql1 = "SELECT sum(insert1) FROM addForm";

                $result = $db->query($sql1);

                $add= $result->fetch_array(MYSQLI_ASSOC);

                echo ' 입금액 합계 : ' . $add['sum(insert1)'];</p>

<p>

합계를 구하는건 이런식으로 하는건 알고 있는데, 질문드린것처럼 하는 방식이 참 어렵네요..ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
플래토
2년 전

금액의 입/출이 발생할때
발생시점별로 입금+, 출금-를 하고 잔액을 해당시점에 같이 기록해주어야 계산로직을 돌리지 않을수있습니다.

컬럼이 3개라고 하신것처럼 insert1, insert2, sum 에 각각 기록을 해주어야죠

 

참고로  컬럼명이 sum/add 등과 같은 예약어또는 함수명과 같거나 유사하면 다르게 지정하는게 좋습니다.오작동되거나 오해를 수반하기때문에 최초코딩한 사람도 나중에 본인의 코드도 이해를 못하게됩니다.

 

위의 내용처럼 컬럼이 존재할때는

발생일자를 반드시 기록해두어야 합니다.

시분초, 혹은 그보다 더 정밀할수록 좋습니다.

 

입금액 합계를 sum(insert1)으로 하면 잔액은 최종잔액만 나옵니다.

최악의 결괄르 도출할수있습니다.

 

$sql = "select insert1, insert2 from addForm order by idx ";

// idx는 기본키가 있다는가정하에 명시한것이고, 그게 아니라면 reg_date같은 기록일시를 사용하는게 좋습니다.

그리고, 누구의 금액정보인지를 알아야 기록을 하겠죠

임의로 컬럼에 user_id컬럼과 $사용자ID가 있다고 가정하고 

다시 코드를 구성해보면

</p>

<p>    //$sql1 = "SELECT sum(insert1) FROM addForm";</p>

<p> </p>

<p>    $sql1 = "select insert1, insert2 from addForm where user_id = '{$사용자ID}' order by reg_date";</p>

<p>    $balance = 0;</p>

<p>    $result = $db->query($sql1);</p>

<p>    while ($add= $result->fetch_array(MYSQLI_ASSOC)) {</p>

<p>         $balance += $add['insert1'] - $add['insert2'];</p>

<p>                echo '입금 : '.$add['insert1']." , ";</p>

<p>                echo '출금 : '.$add['insert2']." , ";</p>

<p>                echo ' 입금액 합계 : ' . $balance."
"; </p>

<p>    }</p>

<p>

 

일단은 전체값을 가져와서 이런식으로 구성하면 되지 않을까 생각됩니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

끄끄
2년 전
한가지만 더 질문드려 봅니다 ㅠㅠ 정렬을 내림차순으로 하려고 DESC를 넣었는데, 잔액부분의 값이 변해버리더라구요ㅠ
플래토
2년 전
내림차순으로의 정렬은 결과를 값을 2차원 배열에 넣고 배열을 역순으로 출력해야 합니다.
끄끄
2년 전
array_reverse 로 하는것이 맞는지 모르겠네요..ㅠ 예시코드를 참고할만한게 있을까요?
플래토
2년 전
배열에 담아서 반복문을 역순으로만 하면됩니다.
끄끄
2년 전
네 감사합니다 ^^ 많은 도움 되어서 처리 완료 하였습니다 ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

이거 함수가 객체기반이네요? 그누보드 내장 함수 아닌가봐요?

일단 쿼리로 해결 하기보다는 페츠 배열로 받아와서 += 으로 해서 합산하면되지 않을까요?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

끄끄
2년 전
그렇게하고싶지만, 제가 아직 초보야서요 ㅠㅠㅋ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인