我在我的模型中有这个功能它的目的是从实际日期开始获取过去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;
}
答案 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
答案 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;
}