如何在mysql + codeigniter中按开始时间/结束时间过滤记录

时间:2014-08-10 06:32:09

标签: php mysql sql codeigniter

表结构就像那样

start_time TimeStamp null
end_time TimeStamp null

问题是,我想在开始时间和结束时间内获得所有记录,所有具有null开始时间和值的值。结束时间值(表示记录不受时间限制)

  $this->db->where('start_date <=', now());
        $this->db->where('end_date >', now());

尝试了一些sql的第一个要求,但没有运气,谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

听起来你需要的查询逻辑会是这样的:

...
WHERE NOW() BETWEEN start_date AND end_date
    OR (start_date IS NULL AND end_date IS NULL)

要使用Codeigniter's Active Record执行此操作,请尝试:

$this->db->where('NOW() BETWEEN start_date AND end_date');
$this->db->or_where('start_date IS NULL AND end_date IS NULL');

或者,您可以将整个事情放在一个陈述中:

$where = 'NOW() BETWEEN start_date AND end_date OR (start_date IS NULL AND end_date IS NULL)';
$this->db->where($where);

答案 1 :(得分:2)

您可能需要进行复合查询。

$within_range = array('start_date <=' => now(), 'end_date =>' => now());
$not_restricted = array('start_date IS NULL' => null, 'end_date IS NOT NULL' => null)
$this->db->where($within_range)->or_where($not_restricted); 

详细了解https://ellislab.com/codeigniter/user-guide/database/active_record.html#select

处的关联数组和or_where语法

当然你可以使用raw sql查询:

$this->db->select('select ...');