gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:19:05 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com