【问题标题】:CodeIgniter Record Selection between two dates两个日期之间的 CodeIgniter 记录选择
【发布时间】:2016-09-14 01:27:09
【问题描述】:

我正在使用 CodeIgniter,我需要有关以下问题的帮助。我提供了一些开始日期和结束日期,我想看看在这些提供的日期上或之间有哪些预订。

$startdate = '2016-05-23';
$enddate = '2016-05-27';

$this->$db->select('reservationid, startdate, enddate');
$this->$db->from('reservation');
$this->$db->where('startdate >=', $startdate);
$this->$db->where('enddate <=', $enddate);
$query = $this->$db->get()->result_array();

return $query;

Result = Array ( [0] => Array ( [reservationid] => KHAN2016Q224 [startdate] => 2016-05-23 [enddate] => 2016-05-27 ) )

上面的查询返回上面的结果。

但是当我提供时

$startdate = '2016-05-24';
$enddate = '2016-05-26'; 

然后它返回一个空数组。我希望当我在日期之间搜索时应该再次返回上述reservationid,因为在这个日期有一些预订,我不希望它被排除。

【问题讨论】:

  • 如果 startdate 是 2016-05-21 和 enddate 2016-05-25 或者 startdate 是 2016-05-21 和 enddate 2016-05-28 或者 startdate 是 2016-05-25 并且 enddate 是2016-05-28?

标签: php mysql codeigniter


【解决方案1】:

如果我理解正确,您想退回任何持续时间在两个日期之间的预订,因此您可以编写自定义 WHERE 部分。

$startdate = '2016-05-23';
$enddate = '2016-05-27';

$this->$db->select('reservationid, startdate, enddate');
$this->$db->from('reservation');
$this->$db->where('(startdate BETWEEN "' . $startdate . '" AND "' . $enddate . '") OR (enddate BETWEEN "' . $startdate . '" AND "' . $enddate . '")');
$query = $this->$db->get()->result_array();

return $query;

当然,您需要正确地转义 $startdate$enddate,或者通过从这些日期创建 DateTime 类来检查它们是否是正确的日期。

【讨论】:

    【解决方案2】:

    试试下面这个查询,它对我有用。

    $this->db->select('*');
    $this->db->from('table');
    $this->db->group_start();
        $this->db->where('start_date <=',$start_date);
        $this->db->where('end_date >=',$start_date);
    $this->db->group_end();
    $this->db->group_start();
        $this->db->where('start_date <=',$end_date);
        $this->db->where('end_date >=',$end_date);
    $this->db->group_end();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2018-06-10
      相关资源
      最近更新 更多