【问题标题】:Cannot retrieve data between two time ranges in Codeigniter无法在 Codeigniter 中检索两个时间范围之间的数据
【发布时间】:2019-07-10 06:34:13
【问题描述】:

我想显示用户输入开始时间的表中的所有记录,并且 结束时间位于数据库列 start_time 和 end_time 之间。我已经使用 between 但它没有给出正确的结果。只有当我的 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

【问题讨论】:

  • 您的TIME(start_time) BETWEEN "07:15:00" and "20:00:00" 不应该是在数据库启动_time 之前还是之前?我的意思是,不应该是这样的TIME(start_time) BETWEEN "07:00:00" and "20:00:00"TIME(start_time) BETWEEN "06:15:00" and "20:00:00"吗?
  • @tcadidot0: 数据库时间开始为 07:00:00,结束时间为 21:00:00,我有文本字段,如果他的时间范围下降,用户将在其中输入他的开始时间和结束时间在这种情况下,假设我输入 13:00:00 和 18:15:00 之间的数据库时间范围,那么将获取记录,但在上述情况下,当我在开始字段或 09 中输入 07:00:00 时,我只会获取行: 00:00 在结束字段中。
  • 好的,在您的数据库数据示例中,您的 start_time=07:00:00 和您的 end_time=21:00:00.. 使用这些数据,您在运行 sql 查询时是否得到任何结果?
  • 只有当我输入“07:00:00”和“21:00:00”的范围时才会得到结果,但如果我输入 10:00:00 - 18:00:00 或任何其他时间位于范围之间的值结果为空。
  • 请在此处尝试sqlfiddle.com/#!9/958b05/2。如果您进行更改,请确保在链接中,最后一个数字更改为其他数字并将链接复制到您的问题中。谢谢

标签: php mysql codeigniter codeigniter-3


【解决方案1】:

让我们考虑这个方法:

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 之间,它将返回一个值。

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多