2016-12-09 2 views
1

profit 컬럼이있는 보고서가 있습니다. 이익 기둥의 모든 가치를 더하고 그 날의 총 이익을 얻어야합니다. 내가 도움이 되었기 때문에 어떤 도움을 주셔서 감사합니다.FPDF에서 이익 합계를 계산하십시오.

$result = mysqli_query($connection, "SELECT S.sales_id, I.item_name, ST.stock_code, 
    S.date, S.unit_price, SUM(S.qty), (SUM(S.qty)*S.unit_price), 
    ((SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost)) FROM sales S 
    INNER JOIN items I ON S.item_id=I.item_id 
    INNER JOIN stock ST ON S.stock_id=ST.stock_id 
    INNER JOIN purchase_items P ON S.purchase_id=P.purchase_id 
    WHERE S.date BETWEEN '$date 00:00:00' AND '$date 23:59:59' GROUP BY S.item_id"); 

$qty = $row['SUM(S.qty)']; 
$unit_price = $row['unit_price']; 
$amount = $row['(SUM(S.qty)*S.unit_price)'];  
$profit = $row['((SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost))']; 
$dailyProfit = $row['(SUM(SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost)))']; 
$pdf->Cell(25,10,$dailyProfit,'B',0,'J',1); 

이 지난 항목의 profit, 어떻게이 매일 sum(profit)를 얻기 위해 수정해야 만 하나 개의 레코드를 검색?

enter image description here

업데이트 코드

$result = mysqli_query($connection, "SELECT S.sales_id, I.item_name, ST.stock_code, S.date, 
    S.unit_price, SUM(S.qty) AS line_qty, (SUM(S.qty)*S.unit_price) AS line_total, 
    ((SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost)) AS line_profit 
    FROM sales S 
    INNER JOIN items I ON S.item_id=I.item_id 
    INNER JOIN stock ST ON S.stock_id=ST.stock_id 
    INNER JOIN purchase_items P ON S.purchase_id=P.purchase_id 
    WHERE S.date BETWEEN '$date 00:00:00' AND '$date 23:59:59' GROUP BY S.item_id"); 

$qty = $row['line_qty']; 
$unit_price = $row['unit_price']; 
$amount = $row['line_total'];  
$profit = $row['line_profit']; 

$aRows = array(); 
while ($oRow = mysqli_fetch_assoc($result)) $aRows[] = $oRow; 
mysqli_free_result($result); 

$dTotalProfit = 0; 
if (count($aRows) > 0) foreach ($aRows as $aRow) { 
    $dTotalProfit += $aRow['line_profit']; 
    //$pdf->Cell(25, 10, $aRow['line_qty'], 'B', 0, 'J', 1); 
} 
$totalProfit = number_format($dTotalProfit, 2); 

$pdf->Cell(220, 10, 'Daily Total Profit:', 'B', 0, 'R', 1); 
$pdf->Cell(25, 10, $totalProfit, 'B', 0, 'J', 1); 

enter image description here

+0

그리고 지금까지 시도한 것을 보여주는 코드가 있습니까? – Kitson88

+0

아, 미안해 .... 이제 볼 수있어. – Kitson88

+1

나는 당신이 그 item_id에 의해 그룹을한다고 생각한다. 그 특정 아이템을 기반으로하는 하나의 레코드의 결과를 얻는다. 그래서 array_sum()을 사용하여 하루 종일 이익을 계산해야한다. – jilesh

답변

3

당신은 PHP 변수, SQL 쿼리로 실행이 유일한 작업에 SQL 함수와 표현을 적용 할 수 없습니다.

<?php 
$sSQL = "SELECT S.sales_id, I.item_name, ST.stock_code, S.date, S.unit_price, 
    SUM(S.qty) AS line_qty, (SUM(S.qty)*S.unit_price) AS line_total, 
    ((SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost)) AS line_profit 
    FROM sales S 
    INNER JOIN items I ON S.item_id=I.item_id 
    INNER JOIN stock ST ON S.stock_id=ST.stock_id 
    INNER JOIN purchase_items P ON S.purchase_id=P.purchase_id 
    WHERE S.date BETWEEN '$date 00:00:00' AND '$date 23:59:59' GROUP BY S.item_id"; 

그런 다음 다음을 사용하여 값에 액세스 할 수 있습니다 :

$qty = $row['line_qty']; 
$unit_price = $row['unit_price']; 
$amount = $row['line_total'];  
$profit = $row['line_profit']; 
난 당신이 예를 들어, 계산 된 값에 열 이름이나 별칭을 할당 추천 할 것입니다 혼란을 줄이고 가능한 한 코드로 읽을 수 있도록 돕기 위해

일일 총 이익이 쉽게 이러한 맥락에서 루프 내에서 수행되는 모든 반환 된 행의 값을 요약해야합니다 얻으려면 : 봇에서 다음

$oConnection = mysqli_connect($sHostname, $sUsername, $sPassword); 
mysqli_select_db($oConnection, $sDatabaseName); 
$oResult = mysqli_query($oConnection, $sSQL); 
$aRows = array(); 
while ($oRow = mysqli_fetch_assoc($oResult)) $aRows[] = $oRow; 
mysqli_free_result($result); 

$dTotalProfit = 0; 
if (count($aRows) > 0) foreach ($aRows as $aRow) { 
    $dTotalProfit += $aRow['line_profit']; 
    $pdf->Cell(25, 10, $aRow['line_qty'], 'B', 0, 'J', 1); 
    ... 
} 

과 귀하의 PDF의 톰, 당신은 number_format($dTotalProfit, 2) 일일 총 이익 금액을 출력하는 데 사용할 수 있습니다.


다음 요약하고 위의 모든 기술을 적용하려면 : 나는 일반적으로 날짜가 될 것 재무 보고서에서와 처음으로 날짜 열을 이동 한 당신은 또한 알 수 있습니다이 코드에서

$oQuery = mysqli_query($connection, "SELECT S.sales_id, I.item_name, ST.stock_code, S.date, 
    S.unit_price, SUM(S.qty) AS line_qty, (SUM(S.qty)*S.unit_price) AS line_total, 
    ((SUM(S.qty)*S.unit_price)-(SUM(S.qty)*P.unit_cost)) AS line_profit 
    FROM sales S 
    INNER JOIN items I ON S.item_id=I.item_id 
    INNER JOIN stock ST ON S.stock_id=ST.stock_id 
    INNER JOIN purchase_items P ON S.purchase_id=P.purchase_id 
    WHERE S.date BETWEEN '$date 00:00:00' AND '$date 23:59:59' GROUP BY S.item_id"); 

$aRows = array(); 
while ($oRow = mysqli_fetch_assoc($oQuery)) $aRows[] = $oRow; 
mysqli_free_result($oQuery); 

$aColumnWidths = array(25, 20, 20, 100, 20, 20, 20, 20); 
$dTotalProfit = 0; 
if (count($aRows) > 0) foreach ($aRows as $aRow) { 
    $dTotalProfit += $aRow['line_profit']; 
    $pdf->Cell($aColumnWidths[0], 10, $aRow['date'], 'B', 0, 'J', 1); 
    $pdf->Cell($aColumnWidths[1], 10, $aRow['sales_id'], 'B', 0, 'J', 1); 
    $pdf->Cell($aColumnWidths[2], 10, $aRow['stock_code'], 'B', 0, 'J', 1); 
    $pdf->Cell($aColumnWidths[3], 10, $aRow['item_name'], 'B', 0, 'L', 1); 
    $pdf->Cell($aColumnWidths[4], 10, $aRow['line_qty'], 'B', 0, 'R', 1); 
    $pdf->Cell($aColumnWidths[5], 10, $aRow['unit_price'], 'B', 0, 'R', 1); 
    $pdf->Cell($aColumnWidths[6], 10, $aRow['line_total'], 'B', 0, 'R', 1); 
    $pdf->Cell($aColumnWidths[7], 10, $aRow['line_profit'], 'B', 0, 'R', 1); 
    $pdf->Ln(); 
} 
$pdf->Ln(); 
$pdf->Cell($aColumnWidths[0] + $aColumnWidths[1] + $aColumnWidths[2] + $aColumnWidths[3] + 
    $aColumnWidths[4] + $aColumnWidths[5] + $aColumnWidths[6], 10, 
    'Daily Total Profit:', 'B', 0, 'R', 1); 
$pdf->Cell($aColumnWidths[7], 10, number_format($dTotalProfit, 2), 'B', 0, 'R', 1); 

왼쪽에 표시 한 다음 맨 오른쪽의 수익 열은 바로 아래에 합계를 갖습니다. 포함 된 소스 코드가 포함되지 않았으므로 $pdf->Cell 행의 형식을 추측했습니다.

또한 접미사에 익숙하지 않은 경우 제 응답 소스 코드에서 헝가리 표기법을 사용했습니다. 예를 들어 $ oQuery의 o는 객체를, a는 $ aRows의 a는 배열을, d는 $ dTotalProfit은 double을위한 것이고, 나는 정수를 위해 i를 사용할 수 있고, 부울 등을 위해 b를 사용할 수있다. 이름에서 변수 유형을 식별 할 수 있으면 코드 가독성을 높이는 데 도움이됩니다.

+0

훌륭한 코드를 제공해 주셔서 감사합니다. 나는 그것을 코드에 적용했다. 이제는 하나의 레코드 (첫 번째 레코드)를 검색하고 보고서에 표시되지 않는 레코드의 일일 총 이익을 얻습니다. 이 문제를 어떻게 해결할 수 있습니까? 원래 게시물에서 업데이트 된 코드와 인쇄 화면을 찾으십시오. – EKBG

+0

최종 총 이익이 정확한 것처럼 보입니다.행 줄을 추가하는 코드 줄이 총 수익을 늘리는 동일한 루프 안에 있는지 확인 했습니까? 즉, 업데이트 된 코드에'// $ pdf-> Cell (...)'행을 주석 처리 한 부분이 있습니까? 'foreach' 루프 안에는 필자의 예제에 포함 된 것과 같은 모든 컬럼 행을 볼 것으로 예상됩니다. 더 정확한 코드 스 니펫으로 답변을 업데이트했습니다. – richhallstoke

관련 문제