【问题标题】:How to Loop and Count Data From 2 Separate Tables in Codeigniter?如何从 Codeigniter 中的 2 个单独的表中循环和计算数据?
【发布时间】:2016-02-15 04:54:09
【问题描述】:

感谢您对 my previous question 关于 Codeigniter 的帮助

更新:由于每个人都对我的问题感到有些困惑,因此我编辑了我的问题。

我在一家银行公司工作,我的项目是为我公司的客户交易创建实时监控。

我需要帮助来创建一个 HTML 表,该表显示每个客户端的总事务,包括成功和失败。 HTML 表格应如下所示:

这是我的数据库结构(我无法更改结构,因为我没有 root 访问权限)

数据库 A(包含银行名称及其 ID 代码)

表 1 = 银行名称、ATMNode、CardNode、BankGroup、CDC

数据库B(包含所有交易数据,如日期、加密和加密卡号)

表 2 = Postid、Transid、SettleID、ATMNode、Rsp_Code、CDC

现在,我已成功循环模型中的所有银行名称。我需要做的就是从每个银行名称中计算 SUCCESS 和 FAILURE 行,然后循环计算结果。

起初我为 1 个银行名称创建了 1 个函数,但后来我从某人那里得到了一个提示,但它不是这样工作的。他说我需要用循环的银行名称创建一个参数或其他东西,然后我可以循环每个银行名称的 COUNT 数据。

这是我的模型:

<?php class Dash_model extends CI_Model {

        public function __construct()
        {
                // Cal CI Constructor
                parent::__construct();
                // Load Database A.
                $CI = &get_instance();
                //setting the second parameter to TRUE (Boolean) the function will return the database object.
                $this->db2 = $CI->load->database('db2', TRUE);
        }

        // Get all the bank name
        public function getbanklist()
        {
            $query = $this->db2->query("SELECT BankName FROM Table1 ORDER BY BankName");
            return ($query->result());

        }

        function transapproved() // Counting Success
        {
            // Database B autoloaded in autoload.php
            $this->db->select('TransID');
            $this->db->from('Table2');
            $this->db->join('Table1', 'Table1.CDC = Table2.CDC', 'inner');
            $this->db->where('BankName', $getbanklist);
            $this->db->where('Rsp_code', '01');
            $data = $this->db->get();
            return $this->data->num_rows();

        }

        function transfailure() // Counting Failure
        {
            // Database B autoloaded in autoload.php
            $this->db->select('TransID');
            $this->db->from('Table2');
            $this->db->join('Table1', 'Table1.CDC = Table2.CDC', 'inner');
            $this->db->where('BankName', $getbanklist);
            $this->db->where('Rsp_code', '02');
            data = $this->db->get();
            return $this->data->num_rows();
        }

}

?>

当然我的模型不工作。它没有返回任何东西。即使它工作,它也只返回一行。所以我需要你们的帮助。

然后这是我的控制器:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Dash_control extends CI_Controller {

    public function __construct()
       {
            parent::__construct();
            $this->load->model('dash_model');
            $this->load->library('table');
       }

    public function index()
    {
        $tmpl = array (
        'row_start'           => '<tr>',
        'row_end'             => '</tr>',
        'cell_start'          => '<td>',
        'cell_end'            => '</td>',
        );

        $this->table->set_template($tmpl); 

        $data['banknamehere'] = $this->dash_model->getbanklist();

        $this->load->view('dashboard',$data);
    }


}

然后我将它传递给我的 VIEW:

<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Bank Name</th>
<th>Trans Success</th>
<th>Trans Failure</th>
</tr>
</thead>
<tbody>
<?php foreach ($banknamehere as $row)
{ ?>
<tr><td><?php echo $row->banknamehere; ?></td></tr>
<?php } ?>
</tbody>
</table>

是的,一切都没有奏效。我认为关键必须在模型中。但我不知道怎么做。 谢谢你的帮助...

【问题讨论】:

  • table1 和 table2 中的公共字段是什么?以及你为什么使用 table3 ?
  • 我知道这真的很令人困惑...但是我展示的表格只是我公司数据库中的一个示例...表 1 包含客户的个人数据,而表 2 和表 3 处理所有交易信息...
  • 此架构在逻辑上是错误的。您将如何从table 2 指向客户。要求您的公司重新设计架构,或者您可以修复它。
  • 好的。那就是示例数据结构错误。表 1 和表 2 必须有客户 ID。表 1 中有一个主键,表 2 中有一个外键。如果您在表结构中更改此类型。然后继续前进。
  • 好吧,大家好像都糊涂了,让我用真实的重新设计一下结构吧……我在一家银行公司工作,所以我不敢展示真实的表结构,因为它是非常机密...请给我几分钟...

标签: php sql sql-server codeigniter


【解决方案1】:

根据上一个答案更改表结构

Table 1 = CustomerId, CustomerName, CustomerCity, CustomerCountry, CustomerGroup

Table 2 = TransactionID, CustomerCity, TransactionStatus, DateTime,CustomerId

Table 3 = TransactionID, CustomerCountry, CustomerGroup, EncryptKey,CustomerId

然后在你的模型中

功能如下

public function transactionsuccess()
{
    $query = $this->db->query("SELECT Table1.CustomerName as Name,Count(CustomerName) as SuccessfullTransaction  FROM Table2 join Table1 ON Table1.CustomerId=Table2.CustomerId WHERE Table2.Status='Success' GROUP BY Table1.CustomerName ORDER BY Table1.CustomerName");

    return $query->result(); 
}
public function transactionfailure()
{
    $query = $this->db->query("SELECT Table1.CustomerName as Name,Count(CustomerName) as FailureTransaction  FROM Table2 join Table1 ON Table1.CustomerId=Table2.CustomerId WHERE Table2.Status='Failure' GROUP BY Table1.CustomerName ORDER BY Table1.CustomerName");

    return $query->result(); 
}

然后在你的控制器中

public function index()
{
    $tmpl = array (
    'row_start'           => '<tr>',
    'row_end'             => '</tr>',
    'cell_start'          => '<td>',
    'cell_end'            => '</td>',
    );

    $this->table->set_template($tmpl); 


    $data['success'] = $this->dash_model->transactionsuccess();
    $data['failure'] = $this->dash_model->transactionfailure();

    $this->load->view('dashboard',$data);
}

然后在你的视图文件中

<tbody>
 <tr>
  <td>Customer Name</td>
  <td>Successfull Transaction</td>
  <td>Failed Transaction</td>
 </tr>
  <?php foreach (array_combine($success, $failure) as $success_row =>  $failure_row)
   { ?>
  <tr>
    <td><?php echo $success_row->Name; ?></td>
    <td><?php echo $success_row->SuccessfullTransaction; ?></td>
    <td><?php echo failure_row->FailureTransaction; ?></td>
  </tr>
   <?php } ?>
</tbody>

更新答案: ................................................

在模型中

     <?php
    class Dash_model extends CI_Model 
    {
            public function __construct()
            {

                    parent::__construct();
                    $CI = &get_instance();
                    $this->db2 = $CI->load->database('db2', TRUE);
            }


            function transapproved() // Counting Success
            {
        $query = $this->db->query("SELECT Table1.BankName as Name,Count(BankName) as   SuccessfullTransaction  FROM Table2 join Table1 ON Table1.CDC = Table2.CDC WHERE Table2.Rsp_code='01' GROUP BY Table1.BankName ORDER BY Table1.BankName");

        return $query->result(); 

            }

            function transfailure() // Counting Failure
            {
        $query = $this->db->query("SELECT Table1.BankName as Name,Count(BankName) as FailureTransaction  FROM Table2 join Table1 ON Table1.CDC = Table2.CDC WHERE Table2.Rsp_code='02' GROUP BY Table1.BankName ORDER BY Table1.BankName");

        return $query->result(); 
            }

    }
?>

在控制器中

public function index()
{
    $tmpl = array (
    'row_start'           => '<tr>',
    'row_end'             => '</tr>',
    'cell_start'          => '<td>',
    'cell_end'            => '</td>',
    );

    $this->table->set_template($tmpl); 


    $data['success'] = $this->dash_model->transapproved();
    $data['failure'] = $this->dash_model->transfailure();

    $this->load->view('dashboard',$data);
}

在视图中

<tbody>
 <tr>
  <td>Bank Name</td>
  <td>Successfull Transaction</td>
  <td>Failed Transaction</td>
 </tr>
  <?php foreach (array_combine($success, $failure) as $success_row =>  $failure_row)
   { ?>
  <tr>
    <td><?php echo $success_row->Name; ?></td>
    <td><?php echo $success_row->SuccessfullTransaction; ?></td>
    <td><?php echo $failure_row->FailureTransaction; ?></td>
  </tr>
   <?php } ?>
</tbody>

【讨论】:

  • 我已经为您更新的问题发布了另一个答案。希望它有效
  • 嗨,很抱歉迟到的评论...我认为这段代码是合法的,我正在尝试使用您的代码,让我尝试使用实际查询对其进行编码...我会让您知道很快……
  • 我认为 VIEW 代码有问题,错误如下: Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ';'在第 302 行的 C:\xampp\htdocs\application\views\dashboard.php 中遇到 PHP 错误严重性:解析错误消息:语法错误,意外 '->' (T_OBJECT_OPERATOR),期待 ',' 或 ';'文件名:views/dashboard.php 行号:302 回溯:
  • 现在检查..我忘记了变量名前面的“$”符号
【解决方案2】:

在你的模型中

   public function customerlist()
            {
                $query = $this->db->query("SELECT CustomerName,count(CustomerName) FROM Table1 ORDER BY CustomerName");

                return $query->result(); 

            }

count(CustomerName) 将帮助您找到姓名的数量

改变表结构

Table 1 = customer_id, CustomerName, CustomerCity, CustomerCountry, CustomerGroup

Table 2 = TransactionID, CustomerCity, TransactionStatus, DateTime,customer_id

Table 3 = TransactionID, CustomerCountry, CustomerGroup, EncryptKey,customer_id

【讨论】:

  • 是的,当然...如果我的回答对我有帮助。那么请打上绿色勾号。您现在需要什么帮助?
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多