我在数据库中有两个字段表示开始时间和结束时间,另一个字段可能或可能未设置,称为“日期”。
在SELECT时,我需要知道我是在时间范围内还是在时间范围外,并且如果我在时间范围内,只有当日期是今天时才设置日期。
在PHP中执行此操作的最佳方法是什么?
谢谢!
答案 0 :(得分:2)
选择后,我需要知道我是否在时间范围内
SELECT (NOW() BETWEEN date_min AND date_max) is_happening_now
FROM your_table
如果NOW()在date_min和date_max之间,则is_happening_now包含一个包含true的布尔值。显然,这将创建一个您可能不需要的单独列,如果需要,可以将条件放在WHERE子句中。
如果日期已设置,如果我在时间范围内,则仅当日期为今天。
我对这一部分并不是很了解,但您可以使用DATE函数从DATETIME中提取日期(例如:current_date = DATE(some_date)
答案 1 :(得分:2)
我的原始答案根本没有回答你的问题。希望这会。
$query = "SELECT IF(".date('H-m-s')." BETWEEN start-time AND end-time,
'inRange', 'notInRange') WHERE `date` == CURRENT_DATE OR `date` IS NULL";
如果来自PHP的日期('Hm-s')在范围内,它将返回字符串“inRange”,否则它将返回字符串“notInRange”并将匹配数据库中日期为NULL的记录,或当前日期。
你也可以像这样制作SQL语句:
SELECT IF(TIME(CURRENT_TIMESTAMP) BETWEEN start-time AND end-time, 'inRange',
'notInRange') WHERE myDate == CURRENT_DATE OR myDate IS NULL;