【问题标题】:PHP Need help with MYSQL DB and datesPHP 在 MYSQL 数据库和日期方面需要帮助
【发布时间】:2011-08-13 20:41:26
【问题描述】:

我在数据库中有两个字段说明开始时间和结束时间,另一个字段可能会或可能不会设置,称为“日期”。

在 SELECT 时,我需要知道我是否在时间范围内,如果我在时间范围内,则仅当日期是今天时才设置日期。

在 PHP 中最好的方法是什么?

谢谢!

【问题讨论】:

    标签: php mysql database date


    【解决方案1】:

    我原来的答案根本没有回答你的问题。希望这会。

    $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;
    

    【讨论】:

    • 我对语法不太熟悉,看起来像是对每一行执行了一个if,相应地返回结果'inRange','notInRange'。结果放在哪里?谢谢!
    • 它将匹配字段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 中执行此操作,您将获得作为对象的响应。
    【解决方案2】:

    在 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多