2012-03-18 111 views
1

我在我的模型中有這個功能,它的目的是從實際的一天開始獲得過去30天的統計數據,在我到達第30天之前它工作正常,然後我發現它從最早的日期開始計數,所以我將order_by從「ase」翻到了「desc」,但它似乎仍然會在最早的日期之前返回並計數,並且不會向我提供我想要的數據,所以我想知道是否有任何使用codeigniter的方式,並給出應該是實際日期的「限制」的起點。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; 
} 
+0

請參閱本頁:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html – hjpotter92 2012-03-18 03:09:53

+0

您的意思是使用'A SC'?它不是'ase' ...什麼數據類型是'date'? – 2012-03-18 03:29:49

+0

不,我的意思是ase,並且表中的日期類型只是DATE – 2012-03-18 03:46:42

回答

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; 

} 
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

+0

我會試試這個,謝謝 – 2012-03-18 16:32:16

+0

是否需要放DATE_FORMAT? – 2012-03-18 19:35:28