gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:07:23 27 4
gpt4 key购买 nike

我有一个页面,按月显示事件。每个事件的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com