2016-09-24 11 views
2

詳細なヘルプと応答をお寄せいただきありがとうございます。ループテーブルの数値列の合計(クエリの合計ではありません)

私は数週間これを困惑しました。オンラインで研究しており、これを把握することはできません。助けてください。

合計の取得しようとしている列がSQLデータベースに格納されていないことに注意することが重要です。これに対してSELECT SUMは機能しません。私はまた、SUBTOTAL列をsqlに書き込まない方が良いでしょう。事務所のエラーがあった場合、時間やレートを変更する必要がある場合は、1フィールドを2よりも変更したいからです。

ここに私のテーブルには、SQLクエリから移入、次のようになります。表には、TOTALを言う table looks like

が、私はそれはそれの上に列を追加し、合計を移入する必要があります。

ここに私のコードがあります。あなたが必要な場合に備えるために、私はすべてを含んでいます。

$staffquery = mysqli_query($con, "SELECT * FROM kmis_transcribers WHERE transcriber_projectid = '$projectinvoiceid ' ORDER BY transcriber_calltime ASC"); 

$staffcount = mysqli_num_rows($staffquery); 
for($i=0; $i<$staffcount; $i++) { 
$staffarray = mysqli_fetch_array($staffquery); 
$staffid = $staffarray['transcriber_id']; 
$staffregid = $staffarray['transcriber_registryid']; 
$staffposition = $staffarray['staff_position']; 
$staffcalltime = $staffarray['transcriber_calltime']; 
$staffrate = $staffarray['staff_rate']; 
$staffhours = $staffarray['transcriber_hours']; 
$staffovertime = $staffarray['transcriber_overtime']; 


echo('<tr> 

    <td align="center" style="border:1px solid #000000; padding:3px">$'.$staffrate.'</td> 
    <td align="center" style="border:1px solid #000000; padding:3px">'); 

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'"); 
    while ($invoicearray = mysqli_fetch_array($invoicequery)) { 
      echo(''.$invoicearray['invoice_hours'].''); 
} 
    echo('</td> 
     <td align="center" style="border:1px solid #000000; padding:3px">'); 

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'"); 
    while ($invoicearray = mysqli_fetch_array($invoicequery)) { 
      echo(''.$invoicearray['invoice_overtime'].''); 
} 
     echo('</td> 
     <td align="center" style="border:1px solid #000000; padding:3px">'); 

$invoicequery = mysqli_query($con, "SELECT * FROM kmis_invoices WHERE invoice_staffid='$staffid'"); 
    while ($invoicearray = mysqli_fetch_array($invoicequery)) { 
      $invoicehours= $invoicearray['invoice_hours']; 
      $invoiceovertime= $invoicearray['invoice_overtime']; 

    $subtotal = ($invoicehours*$staffrate)+($invoiceovertime*$staffrate*1.5); 
    $subtotalformat = number_format((float)$subtotal, 2, '.', ''); 

     echo('$'.$subtotalformat.''); 
} 
    echo('</td> 
    </tr>'); 
} 
    echo('<tr> 
     <td align="center" style="border:1px solid #000000; padding:3px"></td> 
     <td align="right" style="border:1px solid #000000; padding:3px" colspan="4"><b>TOTAL DUE:</b></td> 
     <td align="center" style="border:1px solid #000000; padding:3px"><b>TOTAL</b></td> 
     </tr> 

あなたは、私が小計列を作成するために使用する式は、4つの異なるクエリを使用していることがわかります - 請求書からとスタッフから。一部のスタッフは料金が異なるため、小計は行ごとに完全に異なるデータに基づいています。

回答はarray_sumにあり、配列を使って$小計がすべて格納されているのに完全に困惑していると思います。

ありがとうございます。このことを明確にしたり、より正確にするために私が必要な場合は、教えてください。私はあなたのproblem.Theの問題を読んでいる

+0

私はあなたの問題を完全には理解していません。私はあなたの問題に答えてくれました。あなたからすぐにフィードバックを得ることを願っています。 –

答えて

2

は私にとって非常に簡単そうですが、私は理解up.Whatあなたのコードがすべて台無しにされたあなたのは、すべての小計値の合計になりました、だから、

Total= 40$ + 108$ = 148$ //from your shown data in fig 

あなたの小計値を計算した後、ループ

$total=0; 
    for($i=0; $i<$staffcount; $i++) { 

のためのあなたの外の変数$合計を初期化し

以下で示される通り、あなたの合計にこれを追加
$subtotal = ($invoicehours*$staffrate)+($invoiceovertime*$staffrate*1.5); 
$total=$total + $subtotal; 
$subtotalformat = number_format((float)$subtotal, 2, '.', ''); 

が最後に

echo('<tr> 
     <td align="center" style="border:1px solid #000000; padding:3px"></td> 
     <td align="right" style="border:1px solid #000000; padding:3px" colspan="4"><b>TOTAL DUE:</b></td> 
     <td align="center" style="border:1px solid #000000; padding:3px"><b>TOTAL : '.$total.'</b></td> 
     </tr> 

として結果で計算$合計の値を入れてPHPコードは非常に長く、台無しに表示されますので、私はあなたがそれを短くするために、このクエリを試してみることをお勧め。

SELECT 
    t1.transcriber_id staff, 
    t1.staff_position position, 
    t1.staff_rate Rate, 
    t2.invoice_hours hours, 
    t2.invoice_overtime 'OT x 1.5', 
    (t2.invoice_hours * t1.staff_rate) + (t2.invoice_overtime * t1.staff_rate * 1.5) subtotal 
FROM 
    kmis_transcribers t1 
     JOIN 
    kmis_invoices t2 ON (t1.transcriber_id = t2.invoice_staffid) 
WHERE 
    t1.transcriber_projectid=1 //$projectinvoiceid in your case 

上記のクエリは、あなたが望むビューを返します。あなたのPHPコードは、今や1つのクエリだけで済む4つのクエリではなく、今のように非常に単純になります。

+0

キラン、助けてくださってありがとうございます。私は自分のコードをより正確にするために、より良い、適切な方法を学んでいます。 – userK1400

+0

私はこれに対する答えは簡単だと思ったが、私はそれの周りに私の心を包むことができなかった。 - 私はあなたの答えを見たことを知りたがっています。私は今日または明日(今週の私の時間を使って仕事をするプロジェクト)を実行しようとしています。これまでのところ質問のみ:​​に合計変数($ total = 0など)を初期化する必要がありますか?TOTAL: '。$ total' ? – userK1400

+0

@ userK1400努力を続け、決してあきらめないでください。 $ totalはすべての小計の合計を保持するので、小計を取得しているループの上で初期化する必要があります。ループが実行された後、$ totalはすべての小計の合計を保持します。 TOTAL: '$ total'。これを試して、より良い学習をしてください。つまったら私たちはあなたを助けます:) –

関連する問題