2012-03-18 10 views
1

私のモデルにはこの機能があります。実際の日から過去30日間の統計情報を取得することを目的としています.30日前に正常に動作していました。それは最も古い日付から数えているので、私はorder_byを "ase"から "desc"に変えましたが、それはまだ戻って、最も古い日の前に数えて、私に必要なデータを与えてくれないようです。 codeigniterを使用して、実際の日付であるべき "limit"の開始点を与えます。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'ではない...' date'はどんなデータ型ですか? –

+0

いいえ私はaseを意味し、日付のタイプはちょうどテーブルの日付です –

答えて

1

私は最終的にBETWEEN使用せずに、実際の日の前29日範囲や日を、与えることによって解決策を見つけ、それは細かい

の作品
<?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を入れる必要がありますか? –

関連する問題