【发布时间】:2011-08-13 20:41:26
【问题描述】:
我在数据库中有两个字段说明开始时间和结束时间,另一个字段可能会或可能不会设置,称为“日期”。
在 SELECT 时,我需要知道我是否在时间范围内,如果我在时间范围内,则仅当日期是今天时才设置日期。
在 PHP 中最好的方法是什么?
谢谢!
【问题讨论】:
我在数据库中有两个字段说明开始时间和结束时间,另一个字段可能会或可能不会设置,称为“日期”。
在 SELECT 时,我需要知道我是否在时间范围内,如果我在时间范围内,则仅当日期是今天时才设置日期。
在 PHP 中最好的方法是什么?
谢谢!
【问题讨论】:
我原来的答案根本没有回答你的问题。希望这会。
$query = "SELECT IF(".date('H-m-s')." BETWEEN start-time AND end-time,
'inRange', 'notInRange') WHERE `date` == CURRENT_DATE OR `date` IS NULL";
如果 PHP 中的 date('H-m-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;
【讨论】:
myDate(我认为您将调用date)设置为CURRENT_DATE(dev.mysql.com/doc/refman/5.5/en/…)或为NULL的记录,并执行IF-这些条件,并为每个匹配的记录返回一个“inRange”或“noInRange”。如果您在处理结果时需要更多数据而不只是“inRange”/“noInRange”来识别记录,您可以正常添加它,例如select col1, col2 if()...。如果您使用 mysql_query/mysqli_query 在 PHP 中执行此操作,您将获得作为对象的响应。
在 SELECT 时,我需要知道我是否在时间范围内
SELECT (NOW() BETWEEN date_min AND date_max) is_happening_now
FROM your_table
is_happening_now 包含一个布尔值,如果 NOW() 介于 date_min 和 date_max 之间,则为 true。显然,这会创建一个您可能不需要的单独列,如果需要,您可以将条件放在 WHERE 子句中。
如果我在时间范围内设置日期,则仅当日期为今天时。
这部分我不是很懂,但是你可以使用 DATE 函数从 DATETIME 中提取日期(例如:current_date = DATE(some_date)
【讨论】: