Невозможно пересчитать общую сумму столбца при фильтрации в PHP - PullRequest
0 голосов
/ 22 января 2020

Я действительно борюсь с некоторым кодом. Я пытаюсь получить сумму указанного c столбца в таблице, мой код приведен ниже.

Это работает с точки зрения предоставления мне суммы столбца - но когда я фильтрую таблицу, общая сумма остается неизменной и не изменяется при фильтрации.

Например, когда я загружаю страницу - сумма столбца action_amount составляет 99, но когда я фильтрую это для поиска другой учетной записи в фильтре, он все равно выдает 99 как сумма. Это, наверное, очень просто, но я уже некоторое время борюсь. Надеюсь, вы можете помочь?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(document).ready(function() {
        $('table thead th').each(function(i) {
            calculateColumn(i);
        });
    });

    function calculateColumn(index) {
        var total = 0;
        $('table tr').each(function() {
            var value = parseInt($('td', this).eq(index).text());
            if (!isNaN(value)) {
                total += value;
            }
        });
        $('table tfoot td').eq(index).text('Total: ' + total);
    }
</script>
</head>
<body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>  
  <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
 </head>
 <body>
  <div class="container box">
   <h3 align="center">How to Get SUM with Datatable Server-side-processing in PHP</h3>
   <br />

 <table id="example1" class="table table-bordered table-striped">
     <thead>
         <tr>
            <th> Date</th>
            <th>Account</th>
            <th> Transaction Name</th>
            <th> Type</th>
            <th>Method</th>
            <th>Amount</th>
            <th> More</th>
           </tr>
    </thead>
    <?php
    if ($result->num_rows > 0) 
    {        
      while($row = $result->fetch_assoc()) {
        ?>
            <tr class="table table-bordered table-striped" id="row-<?php echo $row["id"]; ?>"> 
                <td style="width: 11%" class="table table-bordered table-striped"><?php echo $row["submitted_date"]; ?></td>
                <td style="width: 11%"class="table table-bordered table-striped" > <?php echo $row["posting_account_number"]; ?></td>
                <td style="width: 45%"class="table table-bordered table-striped"><?php echo $row["transaction_name"]; ?></td>
                <td style="width: 22%"class="table table-bordered table-striped"><?php echo $row["method"]; ?></td>
                <td width="11%"class="table table-bordered table-striped"><?php echo $row["type"]; ?></td>
                <td class="table table-bordered table-striped"><?php echo $row["transaction_amount"]; ?></td>
                <td class="table table-bordered table-striped" align = "" colspan="2">
                  <a <a href="" type="link" class="" data-toggle="modal" data-target="#modal-default<?php echo $row["id"]; ?>"> Details</a> </a>

        <tfoot>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td>Total:</td>
                <td></td>
            </tr>
        </tfoot>

1 Ответ

1 голос
/ 22 января 2020

В коде HTML в вашем коде много ошибок ... Интересно, как он работает. </head> написано дважды. <a> добавляется внутри другого <a>. <tr> не закрыто. в конце. И другие вы еще не закрыли. Может быть, поэтому вы могли столкнуться с этими проблемами. Остальное, нам нужно проверить код фильтра, чтобы подробно рассказать.

Я исправил ваши проблемы ниже.

  <script>
    $(document).ready(function() {
        $('table thead th').each(function(i) {
            calculateColumn(i);
        });
    });

    function calculateColumn(index) {
        var total = 0;
        $('table tr').each(function() {
            var value = parseInt($('td', this).eq(index).text());
            if (!isNaN(value)) {
                total += value;
            }
        });
        $('table tfoot td').eq(index).text('Total: ' + total);
    }
</script>

<table id="example1" class="table table-bordered table-striped">
    <thead>
       <tr>
          <th>Date</th>
          <th>Account</th>
          <th>Transaction Name</th>
          <th>Type</th>
          <th>Method</th>
          <th>Amount</th>
          <th>More</th>
       </tr>
    </thead>
    <tbody>
        <?php
           if ($result->num_rows > 0) 
           {        
               while($row = $result->fetch_assoc()) 
               {
                  ?>
                   <tr class="table table-bordered table-striped" id="row-<?php echo $row["id"]; ?>">
                       <td style="width: 11%" class="table table-bordered table-striped"><?php echo $row["submitted_date"]; ?></td>
                       <td style="width: 11%"class="table table-bordered table-striped" > <?php echo $row["posting_account_number"]; ?></td>
                       <td style="width: 45%"class="table table-bordered table-striped"><?php echo $row["transaction_name"]; ?></td>
                       <td style="width: 22%"class="table table-bordered table-striped"><?php echo $row["method"]; ?></td>
                       <td width="11%"class="table table-bordered table-striped"><?php echo $row["type"]; ?></td>
                       <td class="table table-bordered table-striped"><?php echo $row["transaction_amount"]; ?></td>
                       <!-- action -->
                       <td class="table table-bordered table-striped" align = "" colspan="2">
                          <a href="" type="link" class="" data-toggle="modal" data-target="#modal-default<?php echo $row["id"]; ?>"> Details</a>
                       </td>
                  </tr>
                  <?php
               }
        ?>
    </tbody>
    <tfoot>
       <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td>Total:</td>
          <td></td>
       </tr>
    </tfoot>
</table>

Обновлен ответ в соответствии с вашим требованием:

Задайте класс для суммы и в функции js добавьте только данные этого класса.

<script>
    $(document).ready(function() {
        $('table thead th').each(function(i) {
            calculateColumn('.cal_amt');
        });
    });

    function calculateColumn(index) {
        var total = 0;
        $(index).each(function() {
            var value = parseInt($(this).text());
            if (!isNaN(value)) {
                total += value;
                console.log(total);
            }
        });
        $('.show_amt').text('Total: ' + total);
    }
</script>

<table id="example1" class="table table-bordered table-striped">
    <thead>
       <tr>
          <th>Date</th>
          <th>Account</th>
          <th>Transaction Name</th>
          <th>Type</th>
          <th>Method</th>
          <th>Amount</th>
          <th>More</th>
       </tr>
    </thead>
    <tbody>
        <?php
           if ($result->num_rows > 0) 
           {        
               while($row = $result->fetch_assoc()) 
               {
                  ?>
                   <tr class="table table-bordered table-striped" id="row-<?php echo $row["id"]; ?>">
                       <td style="width: 11%" class="table table-bordered table-striped"><?php echo $row["submitted_date"]; ?></td>
                       <td style="width: 11%"class="table table-bordered table-striped" > <?php echo $row["posting_account_number"]; ?></td>
                       <td style="width: 45%"class="table table-bordered table-striped"><?php echo $row["transaction_name"]; ?></td>
                       <td style="width: 22%"class="table table-bordered table-striped"><?php echo $row["method"]; ?></td>
                       <td width="11%"class="table table-bordered table-striped cal_amt"><?php echo $row["type"]; ?></td>
                       <td class="table table-bordered table-striped"><?php echo $row["transaction_amount"]; ?></td>
                       <!-- action -->
                       <td class="table table-bordered table-striped" align = "" colspan="2">
                          <a href="" type="link" class="" data-toggle="modal" data-target="#modal-default<?php echo $row["id"]; ?>"> Details</a>
                       </td>
                  </tr>
                  <?php
               }
        ?>
    </tbody>
    <tfoot>
       <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td class="show_amt">Total:</td>
          <td></td>
       </tr>
    </tfoot>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...