繁体   English   中英

从MySql中抓取当前日期在开始日期和结束日期之间的行(检查当前日期是否在开始日期和结束日期之间)

[英]Grabbing rows from MySql where current date is in between start date and end date (Check if current date lies between start date and end date)

我正在尝试从数据库中进行选择,以获取日期属于月份的“广告系列”。 到目前为止,我已经成功地抓住了当月内开始或结束的行。 我现在需要做的是选择从一个月开始并在几个月后结束的行( EG: 这是一年中的第3个月,并且有一个从第1个月到第5个月的“活动”。示例从2012年到2013年有一个“广告系列”

我希望有一些方法可以通过MySql选择可以运行capaign的所有行。 如果不是,我应该抓取数据库中的所有数据,只显示当前月份运行的数据。

我已经创建了一个函数,显示数组中每个日期之间的所有日期,称为“dateRange”。 我还创建了另一个显示广告系列运行的天数称为“runTime”。

全选 (显然)

$result = mysql_query("SELECT * FROM campaign");

选择从本月开始

$result = mysql_query("SELECT * FROM campaign WHERE YEAR( START ) = YEAR( CURDATE( ) ) AND MONTH( START ) = MONTH( CURDATE( ) )");

选择本月结束

$result = mysql_query("SELECT * FROM campaign WHERE YEAR( END ) = YEAR( CURDATE( ) ) AND MONTH( END ) = MONTH( CURDATE( ) ) LIMIT 0 , 30");

代码示例

while($row = mysql_fetch_array($result))
{
$dateArray = dateRange($row['start'], $row['end']);

echo "<h3>" . $row['campname'] . "</h3> Start " . $row['start'] . "<br /> End " . $row['end'];
echo runTime($row['start'], $row['end']);
print_r($dateArray);
}

关于日期,MySql数据库仅保存活动的开始日期和结束日期。

要检测日期/时间的重叠,您可以执行以下操作:

//range of dates to get overlap. means if any row in the database has
//a day in its start/end range that falls between these days
$startDate = '2012-06-01';
$endDate = '2012-06-30';

$sql = "SELECT *
    FROM campaign
    WHERE
        `start` < '$endDate'
        AND `end` > '$startDate'";

这将从广告系列中找到任何日期落在$ startDate和$ endDate之间的行。 这也适用于所有活动......:

  1. 在$ startDate之前开始,在$ endDate之前结束(日期范围之间的结束日期)
  2. 在$ startDate之后开始并在$ endDate之前结束(在日期范围之间开始和结束)
  3. 在$ startDate之前开始,在$ endDate之后结束(开始和结束包含日期范围)
  4. 在$ startDate之后开始,在$ endDate之后结束(日期范围之间的开始日期)

此外,这个查询现在是$ startDate和$ endDate独占。 这意味着如果某事在5月31日开始(基于上面的示例日期)并在1月6日结束,则不会包括在内。 如果您希望日期为包含日期,则可以更改><>=<=以包括开始日期和结束日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM