CodeIgniter选择查询日期差异

时间:2015-09-12 12:16:24

标签: php mysql codeigniter datetime

如何在PHP CodeIgniter中实现以下查询?

我正在做的是从id中选择approval,其中level = 5和日期时间必须与当前日期时间进行比较。

如果天数超过30天且低于61天,我需要抓取ID

SELECT ID FROM APPROVAL WHERE Level = 5 AND DateTime >= CURDATE() + INTERVAL 30 DAY AND DateTime < CURDATE() + INTERVAL 61 DAY;

我试过了,

$this->db->select('id');
$this->db->from('approval');
$this->db->where('level'=>5);
$this->db->where('date_and_time'>= CURDATE() + INTERVAL 30 DAY);
$this->db->where('date_and_time'< CURDATE() + INTERVAL 61 DAY);
$res=$this->db->get()->result_array();

它没有执行。

4 个答案:

答案 0 :(得分:1)

这里now()是当前日期。 >=1是表存储值和当前日期之间的差。

在执行此操作之前,您应该加载日期助手$this->load->helper('date');

$this->db->select("*", FALSE);
$this->db->from('table');
$this->db->where("DATEDIFF(your_date,now()) >= 1");
$query = $this->db->get();
return $query->result();

否则,您可以像下面这样使用:

$this->db->select("*", FALSE);
$this->db->from('table');
$this->db->where("DATEDIFF(your_date,now())");
$query = $this->db->get();
return $query->result();

答案 1 :(得分:0)

您的语法不正确。

尝试

$this->db->select('id');
$this->db->from('approval');
$this->db->where('level'=>5);
$this->db->where('date_and_time >=', "CURDATE() + INTERVAL 30 DAY", false);
$this->db->where('date_and_time <', "CURDATE() + INTERVAL 61 DAY", false);
$res=$this->db->get()->result_array();

函数false的第三个参数where用于防止CI将您的日期计算视为字段名称,因此不会添加环境&#34;`&#34;

请参阅CI的文档:http://www.codeigniter.com/user_guide/database/query_builder.html?#CI_DB_query_builder::where

答案 2 :(得分:0)

  

帮助您更轻松地重复使用。

function where_between($field, $min, $max){
   $CI = get_instance();
   return $CI->db->where("$field BETWEEN $min AND $max");
}
  

从/ application / helpers /

加载保存名称的助手
$this->load->helper('yoursaved_helper');
//
$this->db->where_between('date_and_time', 30, 61);
  

或者您可以直接使用

$this->db->where("date_and_time BETWEEN 30 AND 61");

答案 3 :(得分:0)

在查询条件的情况下,检查单引号内的条件和条件和值之后的逗号,reference并且在此行 $(function () { $('input').css("width", $('input').parent().width()); for(var i=0;i<3;i++) { $("<tr><td class='t-content'><input class='t-content t-input/>'</td><td class='t-content'><input class='t-input/>'</td><td class='t-content'><input class='t-input/>'</td><td class='t-content'><input class='t-input/>'</td></tr>").attr({ class: "a" }).appendTo('.tSheet') } }) 中等号后面有$this->db->where('level=>', "5");符号时出错,它应该像>或简称>=,如下所示

=