php - MySQL 查询 - 按月和年查找范围内的日期

标签 php mysql

我有一个日历,显示给定月份和年份的事件。每个事件在 DATETIME 字段中都有开始时间和结束时间。

$org = $_SESSION['org_id'];
$month = 5;
$year = 2013;

以下仅检索在指定月份/年份内开始或结束的事件:

SELECT * FROM events WHERE org='$org' AND 
    ((MONTH(time_start)='$month' AND YEAR(time_start)='$year') OR
    (MONTH(time_end)='$month' AND YEAR(time_end)='$year'))

它不会返回在指定月份/年份之外开始和结束的事件。

例如。 time_start='2013-04-07 12:00:00' time_end='2013-06-07 12:00:00' - 在我 2013 年 5 月的查询中找不到该事件。

如何选择开始、结束或跨越给定月份/年份的事件?

最佳答案

SELECT * FROM events 
WHERE org='$org' 
    AND time_start < '$year-$month-01 00:00:00' + INTERVAL 1 MONTH 
    AND time_end > '$year-$month-01 00:00:00'
;

如果你对 mysql 很好,你甚至可以将字符串转换为日期,其他数据库也类似,但 mysql 对字符串还很满意。

关于php - MySQL 查询 - 按月和年查找范围内的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427692/

相关文章:

PHP null 与三元运算符合并(再次)

php - 是否可以创建一个不引用数据库表的 CakePHP 模型?

MySQL (id >= N AND col2 IS NULL) 查询对于大 N 意外地慢

php - 如何通过xpath从网站获取标题?

php - 使用 PHP、MySQL 和 HTML 的在线测验网站

PHP & MySQL 连接更安全

php - SQL中如何处理重复记录?

mysql - 在 sql 查询中返回前 3 个计数值

mysql - MySQL 中的 Zerofill 有什么好处?

php - 语言切换器仅在 Artisan serve 运行时工作