2016-09-24 20 views
2

預先感謝您提供詳細的幫助和回覆。環狀表中的數值列總數(不包括查詢總數)

我已經被困在這個好幾個星期了。一直在線上研究,無法弄清楚這一點。請幫忙。

重要的是要注意 - 我試圖讓總數的列不存儲在我的sql數據庫中。 SELECT SUM不會爲此工作。我也不希望將SUBTOTAL列寫入sql中 - 因爲如果我需要更改小時數或速率(如果出現文字錯誤),我寧願只更改1字段,而不是2.

下面是我的表看起來像,從SQL查詢填充: table looks like

在表格說:TOTAL,我需要它加起來柱上面並填充總量。

這是我的代碼 - 它很長,因爲我包括所有需要的東西。

$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> 

你可以看到,我用它來創建小計列的公式使用四種不同的查詢 - 從發票和工作人員。有些員工的費率不同,所以小計基於可能完全不同的數據。

我認爲答案在於array_sum並使用數組來保存所有的$小計,當他們填充,但我完全難住。

謝謝你真誠。請讓我知道,如果你需要我澄清或幫助使這更加精確。

+0

我不完全瞭解你的問題。我給你的問題的答案,因爲它似乎很簡單,我希望能儘快得到你的反饋 –

回答

2

我已通過您的problem.The問題似乎讀取很簡單給我,但你的代碼是全亂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代碼將是簡單得多,現在是現在,而不是四個查詢只需要一個查詢。

+0

基蘭,感謝您的幫助和建議。我仍然在學習更好更合適的方法來使代碼更加精確,非常感謝您最後一次清理代碼的建議。 – userK1400

+0

我想這個問題的答案很簡單,但我無法圍繞它解決這個問題。 - 我希望你知道我看到了你的答案,並且我想試着在今天或明天實施它(這個週末我的工作項目花費了我的時間),並且一定會讓你知道它對我的作用。只有問題到目前爲止:我是否需要初始化​​中的總變量($ total = 0等等),總計爲:「。$ total」。 ? – userK1400

+0

@ userK1400堅持不懈,永不放棄。 $ total保存了所有小計的總和,因此需要在獲得小計的循環上方初始化。循環執行後,$ total現在保存所有小計的總和。現在可以用來顯示TOTAL:。'total。'。試試這樣你會更好的學習。如果卡住了,我們會幫助你:) –