php - 选择某个月份位于两个日期字段之间的 MySQL 行

标签 php mysql sql wordpress date

我有一个页面,按月显示事件。每个事件的 start_date 和 finish_date 均为 yymmdd。如果某个事件跨越两个不同的月份,则应在其跨越的每个月中显示。例如,如果我的事件开始日期为 03/19/2014,结束日期为 06/19/2014,则该事件应该显示在 3 月、4 月、5 月和 6 月中。

我一直在尝试使用 meta_query 在 wordpress 中执行此操作,但我认为这是不可能的:

        // Get chosen month to display from URL
$events_month = sanitize_text_field($_GET["month"]);
$events_year = sanitize_text_field($_GET["year"]);

// Convert chosen month to display to a timestamp
$ts = strtotime("$events_month $events_year");

// Create chosen month start end end dates to use for query
$month_start_date = date('Ym01', $ts);
$month_end_date = date('Ymt', $ts);

$args = array(
    'post_type' => 'events',
    'posts_per_page' => 50,
    'order' => 'ASC',
    'orderby' => 'meta_value_num',
    'meta_key' => 'start_date',
    'meta_query'        => array(
        array(
            'key' => 'start_date',
            'value' => array($month_start_date, $month_end_date),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
);

$events = new WP_Query($args);

所以我正在寻找一个纯粹的 MySQL 解决方案。请问有什么帮助吗?

最佳答案

我无法告诉您有关 WP 元查询的更多信息,但 SQL 中的这个 WHERE 子句应该涵盖所有四种类型的事件持续时间:
发生的事件

  • 从当月开始,
  • 结束于当月,
  • 仅限当月(暗示之前的条件),
  • 跨越整个月

查询:

SELECT ... FROM ... WHERE
    start_date BETWEEN month_start AND month_end
    OR end_date BETWEEN month_start AND month_end
    OR month_start BETWEEN start_date AND end_date

<小时/> 编辑:
实际上,一个更简单的解决方案是选择

的事件
  • 在当月之前或当月之内开始
  • 并在本月或之后结束

查询;

SELECT ... FROM ... WHERE
    WHERE start_date <= month_end
    AND end_date >= month_start

如果不了解元查询内容(我的引用文献是 this ),您想要的应该像这样工作:

'meta_query' => array(
    'relation' => 'AND', // default is AND
    array(
        'key' => 'start_date',
        'value' => $month_end_date,
        'type' => 'numeric',
        'compare' => '<='
    ),
    array(
        'key' => 'end_date',
        'value' => $month_start_date,
        'type' => 'numeric',
        'compare' => '>='
    )
),

关于php - 选择某个月份位于两个日期字段之间的 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22522666/

相关文章:

没有直接连接的mysql复制

php - 如何将父表当前主键的值插入到子表中

php - 我怎样才能让 PHP 魔法常量 __FILE__ 与 Eclipse 和 PDT 一起工作

PHP 输入 sanitizer ?

mysql - SQL查询清理垃圾记录

mysql - 使用 $ 符号代替 %

sql - 使用一个插入命令插入多行

php - SQL SELECT 的问题

MySQL 查询 : Find column where key like "Y" then use another columns unique ID to update a third column with something?

MySQL 在第一个匹配行之后停止搜索 N 行(不是 LIMIT)