Как рассчитать сумму значений столбцов, удалив дубликаты идентификаторов с помощью PHP в Excel листе? - PullRequest
0 голосов
/ 01 февраля 2019

Нет, я вычисляю итоговый баланс amt ($ row ['Bal‌ anceAmt']). В этом еще одном поле есть номер счета-фактуры. Номера счетов-фактур будут дубликатами. Если дубликаты приходят, только рассчитывают баланс одновременно. Например, счет-фактурачисло равно 1,1,2,3,4,4,7, а сумма остатка равна 10,10,30,40,20,20,80, а общий баланс должен составлять 20 + 30 + 20 + 80 = 15.расчет всей суммы остатка включает в себя все дубликаты номеров счетов-фактур и есть ли возможность устранить эту ошибку?

 $sql = "SELECT a.cusName as CustomerName, a.invoiceNo as InvoiceNo,
                a.bal_amt as BalanceAmt,
                b.itemsName as Items,b.rate as Rate,
                ROUND(b.amt_vat + b.amount, 2) as Amount
                FROM invoices a, invoice_items b where a.invoiceID=b.invoiceid and a.status IS NULL
                and a.invoiceDate between '$getfromdate' and '$gettodate' 
                order by a.invoiceID desc";

  $result = mysqli_query($link, $sql);
  $resultpaymenttotal = mysqli_query($link, $sqlgettotalpyment);


  // Header info settings
  header("Content-Type: application/xls");
  header("Content-Disposition: attachment; filename=$xls_filename");
  header("Pragma: no-cache");
  header("Expires: 0");

  /***** Start of Formatting for Excel *****/
  // Define separator (defines columns in excel & tabs in word)
  $sep = "\t"; // tabbed character
    $col_cnt = 0;
  // Start of printing column names as names of MySQL fields
  for ($i = 0; $i<mysqli_num_fields($result); $i++) {
    $field_info = mysqli_fetch_field($result);
    $col = "{$field_info->name}";
    echo $col . "\t";
     $col_cnt++;
  }
  print("\n");
  // End of printing column names

  // Start while loop to get data
  $row_cnt = 0;
  $tot_BalanceAmt = 0;
  while($row = mysqli_fetch_assoc($result))
  {
    $schema_insert = "";
    $schema_insert .= $row['CustomerName'].$sep.$row['CustomerMob'].$sep.$row['InvoiceNo'].$sep.$row['AdvanceAmt'].$sep.$row['BalanceAmt'].$sep.$row['Items'].$sep.$row['Rate'].$sep.$row['Amount'];
    $tot_BalanceAmt += $row['BalanceAmt'];
    $schema_insert = str_replace($sep."$", "", $schema_insert);
    $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
    $schema_insert .= "\t";
    print(trim($schema_insert));
    print "\n";
    $row_cnt ++;
  }
  print "\n";

  $schema_insert = "";
  for($i=0;$i<$col_cnt-25;$i++)
  {
    $schema_insert .= " ".$sep;
  }
  $schema_insert .= "TOTAL BALANCE = ".$sep;
  $schema_insert .= $tot_BalanceAmt.$sep;
  $schema_insert = str_replace($sep."$", "", $schema_insert);
  $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
  $schema_insert .= "\t";
  print($schema_insert);
  print "\n";

1 Ответ

0 голосов
/ 01 февраля 2019

Попробуйте:

  1. Сразу после инициализации $tot_BalanceAmt = 0; добавьте $invoiceHasProcessed = array();

  2. В тело while-loop строка кода:

$tot_BalanceAmt += $row['BalanceAmt'];

заменить на

if (!in_array($row['InvoiceNo'], $invoiceHasProcessed)) {
    $tot_BalanceAmt += $row['BalanceAmt'];
    $invoiceHasProcessed[] = $row['InvoiceNo'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...