codeigniter中活动记录的上限

时间:2012-03-18 03:04:59

标签: php codeigniter activerecord

我在我的模型中有这个功能它的目的是从实际日期开始获取过去30天的统计数据,它在我到达第30天之前工作正常然后我发现它从最早的日期开始计算,所以我将order_by从“ase”翻转到“desc”,但它似乎仍然在最老的一天之前回来计数并没有给我我想要的数据,所以我想知道是否有任何方式使用codeigniter并给出一个开始指向应该是实际日期的“限制”。

function graph_data($id_person)
{
    $this->db->limit(30);   // get data for the last 30 days including the curent day

    $this->db->where('personid',$id_person);
    $this->db->order_by('date', 'ase');
    $query = $this->db->get('stats');   

    foreach($query-> result_array() as $row)
    {
     $data[] = $row;
    }    
    return $data;
}

2 个答案:

答案 0 :(得分:1)

限制在你的情况下返回最后30行。它与日期无关,除非您每天只添加一行。

尝试使用mysql Between

SELECT  DATE_FORMAT(create_date, '%m/%d/%Y')
FROM    mytable
WHERE   create_date BETWEEN SYSDATE() - INTERVAL 30 DAY AND SYSDATE()
ORDER BY create_date ASC

来源 - https://stackoverflow.com/a/2041619/337055

答案 1 :(得分:1)

我终于通过在实际日期前29天给出一个或多天的范围而不使用BETWEEN来找到解决方案,并且工作正常

<?php
function graph_data($id_person)
{   
$today = date('Y-m-d');
$lastdate = date('Y-m-d', strtotime('-29 days', strtotime($today)));// 30 days ago

$this->db->where('personid',$id_person);
$this->db->where("date <= '$today'");
$this->db->where("date >= '$lastdate'");
$this->db->order_by('date', 'ase');

$query = $this->db->get('stats');   

$data = array();

foreach($query-> result_array() as $row)
{
 $data[] = $row;
}    

return $data;

}