Общая сумма нескольких столбцов в таблице

1

В настоящее время у меня проблема с моей суммой. Ну, у меня есть 3 разных стола. billing_payments, billing_entry и сервисы.

Моя проблема в том, что я не могу получить общее количество сервисов. Я предоставил скриншот, чтобы вы поняли, что я имею в виду.

Изображение 174551

Вот код отчета. Я добавил несколько комментариев, чтобы указать, где проблема начинается и заканчивается.

<table class="table table-striped table-hover">
              <thead>
                <tr>
                <th>#</th>                    
                <th>PATIENT NAME</th>
                <th>CASE</th>                                    
                <?php
                            $servicesquery = $this->db->get('services');
                            foreach ($servicesquery->result() as $service) {
                              echo '<th>'.$service->service_name.'</th>';
                            }
                ?>
                <th>MEDICAL SUPPLIES</th>
                <th>PHILHEALTH</th>
                <th>DISCOUNT</th>
                <th>GROSS</th>
                <th>NET</th> 
                <tr>
              </thead>
                  <tbody>

                     <?php
                            $x = 1;
                            $billquery = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
                            foreach ($billquery->result() as $data) {
                                echo '<tr>';
                                echo '<td>'.$x++.'</td>';
                                echo '<td>'.$data->patientname.'</td>';
                                echo '<td>'.$data->session_id.'</td>';
                                 //SERVICES
                                      $servicesquery = $this->db->get('services');
                                foreach ($servicesquery->result() as $service) {                                     

                                      $this->db->where('billing_serviceid', $service->service_id);
                                      $this->db->where('billing_patientid', $data->patient_id);
                                      $this->db->where('billing_id', $data->billing_id);
                                      $this->db->select_sum('billing_amount');
                                      $billing = $this->db->get('billing_entry');
                                      foreach ($billing->result() as $bill) {
                                        echo '<td>'.$bill->billing_amount.'</td>';
                                      }
                                }
                                  //MEDICAL SUPPLIES
                                      $this->db->where('billing_id', $data->billing_id);
                                      $this->db->where('billing_servicename', 'MEDICAL SUPPLIES');
                                      $this->db->select_sum('billing_amount');
                                      $medsup = $this->db->get('billing_entry');
                                      foreach ($medsup->result() as $med) {
                                        echo '<td>'.$med->billing_amount.'</td>';
                                      }

                                  //PHILHEALTH    
                                      $this->db->where('billing_id', $data->billing_id);                                          
                                      $this->db->select_sum('billing_philhealth');
                                      $philhealth = $this->db->get('billing_entry');
                                      foreach ($philhealth->result() as $phil) {
                                        echo '<td class="bg-info">'.$phil->billing_philhealth.'</td>';
                                      }

                                  //DISCOUNT
                                      $this->db->where('billing_id', $data->billing_id);                                          
                                      $this->db->select_sum('billing_discount');
                                      $philhealth = $this->db->get('billing_entry');
                                      foreach ($philhealth->result() as $phil) {
                                        echo '<td class="bg-info">'.$phil->billing_discount.'</td>';
                                      }

                                  //GROSS
                                      $this->db->where('billing_id', $data->billing_id);                                          
                                      $this->db->select_sum('billing_amount');
                                      $gross = $this->db->get('billing_entry');
                                      foreach ($gross->result() as $gr) {
                                        echo '<td class="bg-warning">'.$gr->billing_amount.'</td>';
                                      }



                                  echo '<td class="bg-danger">'.$data->total_amount.'</td>';
                                echo '</tr>';
                            }






                            echo '<tr>';
                            echo '<td colspan="3" style="text-align:right"><strong>TOTAL:</strong></td>';


                            //PROBLEM STARTS HERE
                            //TOTAL PER SERVICES

                                $quer = $this->db->get('services');
                                foreach ($quer->result() as $service) {                                                              
                                      $totserv = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');                                                                                    
                                      foreach ($totserv->result() as $servdata) {
                                      $id = $servdata->id;   

                                            $this->db->where('billing_id', $servdata->billing_id);  
                                            $this->db->where('billing_serviceid', $service->service_id);                                   
                                            $this->db->select_sum('billing_amount');
                                            $medsup = $this->db->get('billing_entry');
                                            foreach ($medsup->result() as $med) {
                                              echo '<td class="bg-success">'.$med->billing_amount.'</td>';
                                            }

                                      }

                            }

                            //PROBLEM ENDS HERE





                            //TOTAL NET
                            $totalamt = $this->db->query('SELECT SUM(total_amount) AS totalamount FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');
                            foreach ($totalamt->result() as $data) {
                              echo '<td>'.$data->totalamount.'</td>';
                            }
                            echo '</tr>';

                     ?>       
  • 0
    Я думаю, что вы не можете использовать цикл для получения sum так как sum будет общая сумма данных столбца. Вы можете попробовать $bill->row()->billing_amount;
  • 1
    Пожалуйста, научитесь использовать МОДЕЛИ, такие встроенные запросы - действительно плохая практика. Вы можете сделать это намного проще с 1 моделью Сервиса, которая имеет несколько методов для возврата сервисов и счетчиков.
Теги:
codeigniter

1 ответ

0

Если вы посмотрите на свое изображение, ясно, что вы выводите каждое значение из столбцов (в зеленом поле) в последней строке (350, zero, 350, 485, 485, 485, zero, 15, 300)

Вы можете исправить это, добавив переменную-заполнителя для вычисления общего количества для каждой службы, например:

foreach ($quer->result() as $service) {   // you want to output one <td> per service, so the <td> should be printed at the end of this foreach
  $serviceTotal = 0; // initialize the total for each service                                                          
  $totserv = $this->db->query('SELECT * FROM 'billing_payments' WHERE ('date' BETWEEN "'.$this->input->get('from').'" AND "'.$this->input->get('to').'")');                                                                                    
  foreach ($totserv->result() as $servdata) {
  $id = $servdata->id;   

      $this->db->where('billing_id', $servdata->billing_id);  
      $this->db->where('billing_serviceid', $service->service_id);                                   
      $this->db->select_sum('billing_amount');
      $medsup = $this->db->get('billing_entry');
      foreach ($medsup->result() as $med) {
          $serviceTotal = $serviceTotal + $med->billing_amount     
      }
  }
  echo '<td class="bg-success">'. $serviceTotal .'</td>';
}

Таким образом, вы получите один за услугу, а переменная $serviceTotal будет содержать сумму каждой отдельной позиции для этой конкретной услуги.

У вас есть более эффективные варианты, открытые для вас - во-первых, вы можете рассчитать отдельные суммы, когда вы получаете их в блоке кода услуг, например:

$serviceTotals = array(); // a holder for all the totals
foreach ($servicesquery->result() as $service) {                                     
    $this->db->where('billing_serviceid', $service->service_id);
    $this->db->where('billing_patientid', $data->patient_id);
    $this->db->where('billing_id', $data->billing_id);
    $this->db->select_sum('billing_amount');
    $billing = $this->db->get('billing_entry');
    foreach ($billing->result() as $bill) {
      $serviceTotals[$service->service_id] = $serviceTotals[$service->service_id] + $bill->billing_amount; //this updates the total for each service ID
      echo '<td>'.$bill->billing_amount.'</td>';
    }
}

Затем вы можете пропустить этот массив для вывода каждого итога.

В идеале вам следует также рассмотреть возможность расчета всех этих значений в вашем контроллере, который будет вызывать запросы, которые вам нужны из вашей модели (ов), а затем упаковывать эти данные в переменную $data. Затем контроллер может передать все это вашему виду. CodeIgniter имеет много хороших ресурсов для объяснения шаблона Model-View-Controller (MVC) (он немного выходит за рамки этого вопроса, чтобы войти в него здесь), и использование CI без реализации шаблона MVC собирается сделать это сложнее использовать большую часть документации и поддерживать CI в сети.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню