Aynı değere dayalı Postregs tablo hücrelerini ekleme

1 Cevap php

Ben giderler adında bir tablo var. Çok sayıda sütun vardır ama benim php sayfasında yer olanları tarih, spplierinv, miktarıdır. Ben belirli bir ay içinde tüm masrafları listeler ve sonunda onu toplamları bir sayfa oluşturduk. Ancak, her satır bir değeri vardır, ancak birçok satır aynı tedarikçi invoice.This üzerinde olabilir benim banka ekstresinde başına toplam almak için aynı supplierinv Her satırı ekleyerek anlamına gelir. Zaten ben supplierinv dayalı satırlar için bir toplam alabilirsiniz var mı. Yani ben 10 satır var diyelim. Supplierinv 4, on 5 supplierinv 5 iki ve supplierinv 12 3, nasıl bir 3 rakamları (inv 4, 5 ve 12) ve altındaki genel toplamı olsun. Çok teşekkürler

1 Cevap

Eğer tek tek gider satırları yanı sıra tüm toplamları göstermek gerekir mi? Değilse, sen supplierinv sütuna göre grup can ve tutarları toplamı:

select supplierinv, sum(amount) as invoice_amount
from expenses group by supplierinv

o zaman sadece genel toplamı almak için tüm invoice_amount değerleri istemci tarafı ekleyebilirsiniz.

Her gider satır gerekir yaparsanız, oldukça kolay fatura toplama istemci tarafı yapabilirsiniz:

$invtotals = array();
$grand_total = 0;
foreach (getexpenses() as $row) {
    $supplierinv = $row['supplierinv'];
    if (!array_key_exists($supplierinv, $invtotals)) {
        $invtotals[$supplierinv] = 0;
    }
    $invtotals[$supplierinv] += $row['amount'];
    $grand_total += $row['amount'];
}

Başka bir yaklaşım, siz tablo faturalar bölünmüş göstermek istiyorsanız, sadece sonuçlar daha sonra supplierinv tarafından sipariş sağlamak için:

$grand_total = 0;
$invoice_total = 0;
$current_invoice = -1;
foreach (getexpenses() as $row) {
    if ($current_invoice > 0 && $current_invoice != $row['supplierinv']) {
        show_invoice_total($current_invoice, $invoice_total);
        $grand_total += $invoice_amount;
        $current_invoice = $row['supplierinv'];
        $invoice_total = 0;
    }
    $invoice_total += $row['amount'];
    show_expense($row);
}
if ($current_invoice > 0) {
    show_invoice_total($current_invoice, $invoice_total);
    $grand_total += $invoice_amount;
}
show_grand_total($grand_total);

Siz böylece veritabanı gibi her fatura ve genel toplamı için toplama yapmak olabilir:

select date, supplierinv, amount,
       sum(amount) over(partition by supplierinv) as invoice_amount,
       sum(amount) over()
from expenses

Eğer hala makul bu görüntülemek için bazı post-processing yapmak zorunda, bu nedenle bu gerçekten imho bir şey elde etmez rağmen.