无法在Codeigniter中的两个时间范围之间检索数据

时间:2019-07-10 06:34:13

标签: php mysql codeigniter codeigniter-3

我想显示用户输入开始时间的表中的所有记录, 结束时间位于数据库列start_time和end_time之间。我使用了两次之间,但没有给出正确的结果。仅当我的start_time或end_time与数据库值匹配时,才会获取行。例如。仅当我分别在开始时间字段或结束时间字段中输入07:00:00或21:00:00时。

  

数据库结构:

id              int(11) Autoincrement
start_time  datetime NULL    
end_time    datetime NULL
  

数据库数据:

Start_time                end_time
2019-07-04 07:00:00 2019-07-04 21:00:00
  

SQL查询是:

SELECT *
FROM `hours`
WHERE TIME(start_time) BETWEEN "07:15:00" and "20:00:00"
AND TIME(end_time) BETWEEN "07:15:00" and "20:00:00"
  

Codeigniter查询为:

$this->db->where('TIME(start_time) BETWEEN "'. date('H:i:s',strtotime($start_time)). '" and "'. date('H:i:s',strtotime($end_time)).'"');
$this->db->where('TIME(end_time) BETWEEN "'. date('H:i:s',strtotime($start_time)). '" and "'. date('H:i:s',strtotime($end_time)).'"');

链接:http://sqlfiddle.com/#!9/958b05/6

1 个答案:

答案 0 :(得分:0)

让我们考虑一下这种方法:

SELECT *
FROM `hours`
WHERE 36000 >= TIME_TO_SEC(TIME(start_time))
AND 64800 <= TIME_TO_SEC(TIME(end_time));

http://sqlfiddle.com/#!9/958b05/12

我将时间值更改为秒,因为小提琴中有错误。原始查询如下所示:

SELECT *
FROM `hours`
WHERE "10:00:00" >= TIME(start_time)
AND "18:00:00" <= TIME(end_time);

因此,通过用户输入,“ 10:00:00”是开始时间,“ 18:00:00”是结束时间,并使用该时间查询start_time和end_time值。如果用户输入的内容相同或介于start_time和end_time之间,则会返回一个值。