2012-03-18 5 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

+0

Вы имели в виду использовать 'A SC'? Это не 'ase' ... Какой тип данных« дата »? –

+0

Нет, я имею в виду ase, а тип даты - только DATE в таблице –

ответ

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

Я попробую, спасибо –

+0

нужно ли положить DATE_FORMAT? –

Смежные вопросы