今日の日付は 2013 年 4 月 25 日です。はい、サーバーの時刻は正しく、
var_dump
のmdate('%Y-%m-%d', strtotime(now()))
が返され2013-04-25
ます。の MySQL テーブル列
date
は、date
タイプ/フォーマットです。コードイグナイター 2.1.3
検索条件の文字列は
"test"
です。
$criteria = array(
'field1' => 'test',
'field2' => 'test',
'field3' => 'test'
);
「テスト」という単語を含むデータベース内の 4 つの項目の日付は次のとおりです。
date
2013-04-02
2013-04-05
2013-05-07
2013-05-21
私のモデルでは、検索結果 (search = "test") が日付に関係なくすべてを返すようにしたい場合、これは次のようになります...
$this->db->start_cache();
$this->db->or_like($criteria);
$this->db->order_by('date', 'desc');
$this->db->stop_cache();
$query['results'] = $this->db->get('table', $limit, $offset)->result_array();
$this->db->flush_cache();
return $query;
期待どおりの出力:
2013-05-21
2013-05-07
2013-04-05
2013-04-02
上記は完全に機能しており、4 つのアイテムすべてが返されます。
ただし、これを使用where()
し、結果を今日以上に絞り込むために a のみを追加すると...
$this->db->start_cache();
$this->db->or_like($criteria); // <-- remove this line and it works
$this->db->where('date >=', mdate('%Y-%m-%d', strtotime(now()))); // <-- only new line
$this->db->order_by('date', 'asc');
$this->db->stop_cache();
$query['results'] = $this->db->get('table', $limit, $offset)->result_array();
$this->db->flush_cache();
return $query;
予期しない出力:
2013-04-02 // <-- why this one??? today is 4/25
2013-05-07
2013-05-21
今日と将来の結果のみを表示することになっています。 では、今日が 2013 年 4 月 25 日なのに、なぜ 2013 年 4 月 2 日の日付の項目があるのでしょうか。 (まだアイテムを無視しているため、部分的に機能しているよう2013-04-05
です。)
- なぜこうなった?
- これを修正するには?
編集:
順序を逆にしてみました:
$this->db->where('date >=', mdate('%Y-%m-%d', strtotime(now())));
$this->db->or_like($criteria);
および連鎖:
$this->db->or_like($criteria)->where('date >=', mdate('%Y-%m-%d', strtotime(now())));
この:
$this->db->or_like($criteria);
$this->db->where('DATE(date) >= DATE(NOW())');
結果は同じです。