php - 在 CodeIgniter 中按日期范围获取记录

标签 php mysql codeigniter date range

我想在 CodeIgniter 中搜索两个日期之间的记录我尝试了很多方法但没有得到所需的结果。

我的模型

function search($date1 , $date2 ){
    $this->db->where('date<',$date1);
    $this->db->where('date >',$date2);
    $result = $this->db->get();
    return $result;
}

我的 Controller

function getsearch(){
     $date1 = $this->input->post('txtdate1');   // 02-06-2015
     $date2 = $this->input->post('txtdate2');   // 19-06-2015
     $data['result']  = $this->result_model->search($date1,$date2);
     $this->load->view("search_view",$data);
}

现在我想要 2 到 19 之间的所有行,但我什么也没得到。 注意: mysql中的date类型为varchar

最佳答案

02-06-2015 确实是在 SQL 中存储日期的次优方式,因为它们无法合理地进行排序。如果您可以切换到 DATEDATETIME 数据类型,您将能够执行一些很酷的操作,例如在日期列上建立索引。但这不是你问的。

另外,我想知道你的不等式是否有误?您要搜索的日期范围的开始日期和结束日期是多少?

回答您的具体问题:

DATE_FORMAT() MySQL function会将您的字符日期转换为可整理日期。特别是,

  DATE_FORMAT('02-06-2015', '%d-%m-%Y') 

从您的日期中获取一个 DATE 对象。

所以这种 php 代码可以工作

$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') < ","DATE_FORMAT('$date1', '%d-%m-%Y')");
$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') > ","DATE_FORMAT('$date2', '%d-%m-%Y'):);

如果 $date2 是“01-06-2015”并且 $date1 是“04-06-2015”,这将返回第二个的记录和六月的第三天。

您可能需要用这个来代替 [$date1,$date2] 范围。

$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') >= ","DATE_FORMAT('$date1', '%d-%m-%Y')");
$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') <  ","DATE_FORMAT('$date2', '%d-%m-%Y') + INTERVAL 1 DAY");

请注意,您的date 列包含在一个函数中。这无法使用任何索引来对日期进行表搜索。如果您的 date 列具有 DATE 数据类型,则此方法可行。如果您在日期上有一个索引,MySQL 将使用高效的范围扫描。

$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') >= ","'$date1'");
$this->db->where("DATE_FORMAT(date, '%d-%m-%Y') <  ","'$date2' + INTERVAL 1 DAY");

在原始 SQL 中,这会导致......

WHERE DATE_FORMAT(date, '%d-%m-%Y') >= '$date1'
  AND DATE_FORMAT(date, '%d-%m-%Y') <  '$date2' + INTERVAL 1 DAY

关于php - 在 CodeIgniter 中按日期范围获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925115/

相关文章:

javascript - 处理从 PHP 页面返回的 MYSQL 查询结果

php - Symfony2 : fetching all translations under a parent

php - mysql转储命令与 'waiting for table lock property'

php - 使用 codeigniter 在每个用户类型的用户仪表板中显示公告

php - 验证图像 checkin 更新

php - 使用 Laravel 5 从 mysql 数据创建多维数组

mysql - 数据规范化——mysql

php - mysql union 不把所有结果加起来

javascript - 使用 CodeIgniter 时应该如何组织 javascript

php - codeIgniter 3.0 中的 Curl 类