【问题标题】:Count data Using codeigniter monthly wise每月使用 codeigniter 计数数据
【发布时间】:2016-04-12 17:12:27
【问题描述】:

我正在使用 Codeigniter 3.0 和 sql Server

这是我的桌子

customers table:
Amount      Date                            Id
1.00      2014-01-05 00:00:00.000           1
2.00      2014-01-11 00:00:00.000           1
3.00      2014-02-03 00:00:00.000           1
2.00      2014-02-05 00:00:00.000           1

我想将我的输出显示为

January 3.00
February 5.00
!!!!!!

December 12.00

那么,我如何计算该金额以及如何将所有天数归为一个月

我使用的是 codeigniter 3.0,我的数据库是 sql server 2012

public function overviews(){
 //   $merchantid=$this->session->userdata('user_password');
   $baji=$this->livemerchant_model->overviews();
    $name=$this->session->userdata('name');
           $data=array('baji'=>$baji,'name'=>$name);

   if($this->session->has_userdata('user_email','name')){
    $this->load->view('overviews.php', $data);


     }
   }

sfnerd 这是我的控制器,是否可以显示像

这样的数据
select year 
january  12.00
february 24.00


Total    36.00

我只想显示选定年份的金额计数

<label class="tp-label">Select a year</label>
                                                              <select>
                                                               <?php
foreach($monthlyTotals as $row)
{
?>
<option value = "<?php echo $row->TheYear?>"><?php echo $row->TheYear;?>    </option>
<?php
}
?>

所以当我执行此循环时,我会根据像 2014 年这样的月份重复 12 次,我需要像选择 2015 年这样的输出,当我点击该按钮时我有加载按钮需要显示 12 个月

public function overviews()
{
$this->load->model('livemerchant_model');
$name=$this->session->userdata('name');
$data['monthlyTotals'] = $this->livemerchant_model-  >overviews($theyear='');
$this->load->view('overviews', $data);
} 

并使用了这个控制器

帮帮我

【问题讨论】:

    标签: codeigniter sqlsrv


    【解决方案1】:

    可能有几种方法可以做到这一点,但这里有两种方法(一种使用 Active Record,一种直接 SQL)。我使用 CI 3.0.6 和 SQL Server 2012 进行了测试,并创建了一个类似的表。

    模型函数(假设模型称为客户)

    纯 SQL 版本:

    function get_monthly_totals($theYear = '', $theMonth = '')
    {
        $sql = "SELECT DATEPART(Year, Date) [TheYear], DATEPART(Month, Date) [TheMonth], DATENAME(Month, Date) [TheMonthName], SUM(Amount) [TotalAmount]
            FROM Customers
            WHERE Date IS NOT NULL ";
    
        if ($theYear != '') {
            $sql = $sql . " AND DATEPART(Year, Date) = '$theYear'";
        }
    
        if ($theMonth != '') {
            $sql = $sql . " AND DATEPART(Month, Date) = '$theMonth'";
        }
    
        $sql = $sql . " GROUP BY DATEPART(Year, Date), DATEPART(Month, Date), DATENAME(Month, Date) ORDER BY [TheYear], [TheMonth], [TheMonthName]";
    
        $query = $this->db->query($sql);
    
        return $query->result();
    }
    

    Active Record 版本:

    function get_monthly_totals($theYear = '', $theMonth = '')
    {
    
        $this->db->select("DATEPART(Year, Date) [TheYear], DATEPART(Month, Date) [TheMonth], DATENAME(Month, Date) [TheMonthName], SUM(Amount) [TotalAmount]", false);
        $this->db->from('Customers');
    
        if ($theYear != '') {
            $this->db->where("DATEPART(Year, Date) = '" . $theYear . "'", NULL, FALSE);
        }
    
        if ($theMonth != '') {
            $this->db->where("DATEPART(Month, Date) = '" . $theMonth . "'", NULL, FALSE);
        }
    
        $this->db->group_by("DATEPART(Year, Date), DATEPART(Month, Date), DATENAME(Month, Date)");
        $this->db->order_by("1", "asc");
        $this->db->order_by("2", "asc");
        $this->db->order_by("3", "asc");
    
        $query = $this->db->get();
    
        return $query->result();
    }
    

    控制器功能

    public function index()
    {
        $this->load->model('Customers_model');
    
        $data['monthlyTotals'] = $this->Customers_model->get_monthly_totals('2014');
    
        $this->load->view('customers', $data);
    }
    

    查看输出 (customers.php)

    <?php 
        foreach ($monthlyTotals as $row)
        {
            echo $row->TheYear . " - " . $row->TheMonthName . ": " . $row->TotalAmount . " <br />" . PHP_EOL;
        }
    ?>
    

    【讨论】:

    • 感谢 cfnerd 为我工作........但我得到了所有年份的记录,但我想要年份选择,例如选择年份并显示 12 个月的记录
    • @shaik 您可以通过添加 WHERE 子句来调整控制器中的查询来做到这一点。 WHERE 可以是您通过变量传入的东西,也可以是静态的。
    • 谢谢你@cfnerd .. 实际上我已经编辑了我的问题,请你检查一下并给我一个解决方案
    • @shaik 我已经更新了答案。我用这种方法测试过,效果很好。您现在可以将变量传递给模型函数。我还举了一个例子来说明如何使用 CI 中的 Active Record 功能来做到这一点。
    • 我们可以通过一个小查询动态传递年份变量,因为当我选择 2014 或 2015 或任何年份时,我想在视图文件中选择年份作为下拉列表,我想获得该年的总月份数跨度>
    【解决方案2】:

    就我而言,我做了以下代码

    public function earning_chart_year($DriverId,$year){
        $this->db->select_sum('driverCommision');
        $this->db->select('MONTHNAME(displayTime) as createDate');        
        $this->db->group_by('monthname(displayTime)');
        $this->db->where('driverId',$DriverId);
        $this->db->where('year(displayTime)',$year);
        $result=$this->db->get('BookingMaster')->result_array();
        return $result;
    }
    

    输出:

    数组 ( [0] => 数组 ( [总预订] => 52 [createDate] => 十一月 )

    )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2016-05-23
      • 2017-04-28
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多