gpt4 book ai didi

php - 存储时间 - 使用 Time 或 Int 字段? (PHP 和 MySQL 数据库)

转载 作者:行者123 更新时间:2023-11-29 01:14:29 28 4
gpt4 key购买 nike

考虑下面的 SQL 查询:

SELECT * FROM opening_hours  
WHERE week_day = WEEKDAY(NOW()) + 1
AND open_hour =< date_format(now(),'%H:%i')
AND close_hour >= date_format(now(),'%H:%i')

open_hour/close_hour 字段是 TIME 类型。

我正在使用 MySQL。

假设open_time为“18:00”,close_time为“02:00”,当前时间为“22:41”。我们有一个单独的 close_time 数据库记录(因为它是在午夜之后),但我们永远不会在结果中得到它,因为 close_time“02:00”不大于当前时间“22:41”。

此外,如果当前时间是“01:00”,我们将获得下一天的值,因为工作日不匹配。

解决方案?

您是否愿意以整数(分钟)形式存储这些值,以便 php 能够直接处理这些值,而无需任何转换?

例如……

当前时间:

$timearr = explode(':',date("w:H:i"));
$currenttime = ($timearr[0]) * 1440 + $timearr[1] * 60 + $timearr[2]

当前时间的最小值为0(周日,00:00),最大值为10079(周六,23:59)

在数据库中,存储的打开/关闭时间值可能介于 0 和 11519(星期六,47:59)之间

现在假设,当前时间是“Sun, 01:00”(一周的第一天),执行上面的转换这个值是60;一周的最后一天(星期六)的开/关时间设置为“17:00”和“02:00”(实际上是星期日),在数据库中存储为 9660 和 10200(星期六,26:00) .在这种情况下,上面的查询将找不到我们需要的记录(星期六、17:00、02:00),因为我们可能没有任何小于“02:00”(120)的 open_time。为了解决这个问题,我们将“Sun, 01:00”转换为“Sat, 25:00”,方法是将 7*1440(整周)添加到 $currenttime,结果将是 10140。然后 DB 查询如下:

SELECT open_time,clos_time FROM open_hours 
WHERE (open_time <= $currenttime
AND close_time >= $currenttime)
OR (open_time <= $currenttime +10080
AND close_time >= $currenttime + 10080);

或者什么是替代和更简洁的解决方案?

最佳答案

我从经验中学到,总是按原样存储事物并适本地使用数据类型,所以我会推荐时间或日期时间选项。当您开始使用它做任何其他事情时,最好以正确的格式使用它,然后将其转换为显示、排序等。

我所知道的所有 SQL 数据库都支持日期/日期/时间/时间格式,当然 mysql。

如果您需要移动它,即将它导出到另一个数据库或格式,您将使用一个工具(即使只是一个 sql 脚本),它能够将它转换为另一种格式或类型。

关于php - 存储时间 - 使用 Time 或 Int 字段? (PHP 和 MySQL 数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274591/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com