我正在尝试从数据库中进行选择以获取日期落入月份的“事件”。到目前为止,我已经成功地获取了在当月开始或结束的行。我现在需要做的是选择从一个月开始到几个月后结束的行(EG: 这是一年中的第 3 个月,并且有一个“事件”从第 1 个月到第 5 个月运行。 其他示例 有一个从 2012 年到 2013 年运行的“事件” )
我希望有一些方法可以通过 MySql 选择可以运行事件的所有行。如果不是,我应该获取数据库中的所有数据并只显示当月运行的数据。
我已经创建了一个函数来显示数组中每个日期之间的所有天数,称为“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 之间的任何行。这也适用于所有出现的事件...:
- 在 $startDate 之前开始并在 $endDate 之前结束(日期范围内的结束日期)
- 在 $startDate 之后开始并在 $endDate 之前结束(开始和结束都在日期范围内)
- 在 $startDate 之前开始并在 $endDate 之后结束(开始和结束包含日期范围)
- 在 $startDate 之后开始并在 $endDate 之后结束(开始日期介于日期范围之间)
另外,这个查询目前是独占的 $startDate 和 $endDate。这意味着,如果某件事从 5 月 31 日开始(基于上面的示例日期)并在 6 月 1 日结束,则不会包括在内。如果您希望日期包含在内,您可以更改 >
和 <
成为>=
和 <=
包括开始和结束日期。
关于php - 从当前日期在开始日期和结束日期之间的 MySql 中抓取行(检查当前日期是否在开始日期和结束日期之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956646/