【问题标题】:CodeIgniter select query date differenceCodeIgniter select查询日期差异
【发布时间】:2015-12-08 21:54:05
【问题描述】:

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

我正在做的是从approval 中选择id,其中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();

它没有执行。

【问题讨论】:

    标签: php mysql codeigniter datetime


    【解决方案1】:

    你的语法不正确。

    试试

    $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();
    

    函数where 的第三个参数false 用于防止CI 将您的日期计算视为字段名称,因此不会添加周围的“`”

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

    【讨论】:

    • 感谢您的回复,但它没有执行先生:(
    • $res = $this->db->select('id')->get_where('approval',array('level'=>5,'date_and_time >=' => "CURDATE () + INTERVAL 30 DAY",'date_and_time "CURDATE() + INTERVAL 61 DAY"))->result_array();我也试过这个,但它没有给出任何结果。
    【解决方案2】:

    使助手更容易重用。

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

    从 /application/helpers/ 加载您保存名称的 Helper

    $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】:

      查询where条件时出错,检查条件和值后的单引号和逗号内的条件,对于reference,在这一行$this-&gt;db-&gt;where('level=&gt;', "5");中,等号后有&gt;符号,应该像@987654324 @ 或简单的 = 如下所示

      $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();
      

      【讨论】:

      • 感谢您的回复,这里 date_and_time 是我数据库中的时间戳,上述条件也适用于时间戳。
      • 是的日期值条件将适用于时间戳列,检查上面的代码,它会起作用
      • 感谢老兄的回复,但这种方式对我有用。 $this->db->where("level = '5'");
      • 检查我更新的答案它也可以工作,我认为你有列 level 的 varchar,所以我们必须使用引号作为值 "5",如果它有帮助,让它接受答案其他人。
      【解决方案4】:

      感谢您的帮助,这个正在工作:)

                  $this->db->select('id');
                  $this->db->from('approval');
                  $this->db->where("level = '5'");
                  $this->db->where("DATEDIFF(NOW(), date_and_time) BETWEEN 30 AND 60");         
      
                  $pending=$this->db->get()->result_array();
      

      【讨论】:

        【解决方案5】:

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

        在执行此操作之前,您应该加载日期助手$this-&gt;load-&gt;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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-22
          • 2017-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多