0
  • 今日の日付は 2013 年 4 月 25 日です。はい、サーバーの時刻は正しく、var_dumpmdate('%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())');

結果は同じです。

4

2 に答える 2

1

ellislab フォーラムで答えを見つけましたhttps://ellislab.com/forums/viewthread/185983/ を使用する代わりに

$this->db->like('location', $your_string);

使用する:

$this->db->where('location LIKE', '%'.$your_string.'%');

or_likeの代わりにor_where

于 2015-02-09T23:45:05.483 に答える