【发布时间】:2015-02-24 12:49:52
【问题描述】:
我正在运行一个旅行网站,其中包含有开始和结束日期的旅程。现在,这些旅程可以每年进行数次。
现在我有一个包含三个重复开始和结束日期的单一帖子
01.03.2015 - 14.03.2015 2015-03-01 - 2015-03-14
01.04.2015 - 14.04.2015 2015-04-01 - 2015-04-14
01.05.2015 - 14.05.2015 2014-05-01 - 2015-05-14
我想显示我的帖子,其开始和结束日期包含在搜索日期范围内。
搜索 01.06.2015 - 01.07.2015 应该不会返回任何结果。 搜索 01.03.2015 - 01.04.2015 应该返回一个结果。
$reisen_query_args = array(
'post_type' => 'reisen',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'reisezeiten_%_start',
'compare' => '>=',
'value' => $startdate,
'type' => 'DATE'
),
array(
'key' => 'reisezeiten_%_end',
'compare' => '<=',
'value' => $enddate,
'type' => 'DATE'
)
)
这行得通,我不知道为什么:
如果搜索范围是 01.03.2015 - 10.03.2015 (2015-03-01 - 2015-03-10),则帖子不会显示,这是正确的
但是
如果范围是 05.03.2015 - 16.03.2015 (2015-03-05 - 2015-03-16),则会显示错误的帖子,因为搜索开始日期必须是 01.03.2015 (2015-03.01) 或之前返回结果。
与
这仅在我有重复字段时发生。只要只存储一个日期 01.03.2015 - 14.03.2015 (2015-03-01 - 2015-03-14),查询就会按预期运行。
有人可以帮我解决这个问题吗?我现在正在寻找几周的时间来完成这项工作。
这是我的查询的样子:
SELECT SQL_CALC_FOUND_ROWS wp410_posts.ID
FROM wp410_posts
INNER JOIN wp410_term_relationships
ON (wp410_posts.ID = wp410_term_relationships.object_id)
INNER JOIN wp410_postmeta
ON ( wp410_posts.ID = wp410_postmeta.post_id )
INNER JOIN wp410_postmeta AS mt1
ON ( wp410_posts.ID = mt1.post_id )
WHERE 1=1
AND ( wp410_term_relationships.term_taxonomy_id IN (29) )
AND wp410_posts.post_type = 'reisen'
AND ((wp410_posts.post_status = 'publish'))
AND ( ( wp410_postmeta.meta_key LIKE 'reisezeiten_%_start'
AND CAST(wp410_postmeta.meta_value AS DATE) >= '2015-03-02' )
AND ( mt1.meta_key LIKE 'reisezeiten_%_end'
AND CAST(mt1.meta_value AS DATE) <= '2015-03-14' ) )
GROUP BY wp410_posts.ID
ORDER BY wp410_posts.menu_order ASC
LIMIT 0, 6
【问题讨论】:
-
你能澄清一下吗? single 帖子是否包含三个带有
reisezeiten_%_start键的wp_postmeta行和另外三个带有...end键的行?还是三个不同的帖子,每个帖子都有自己的wp_postmeta行? -
是的,它是一个包含六个 wp_postmeta 的单个帖子。三个开始键和三个结束键
-
请再澄清一下!您似乎想查找开始和结束日期完全包含在搜索日期范围内的 reisen。因此,搜索 03-06-2015 - 03-07-2015 应该不会返回任何结果。搜索 02-20-2015 - 03-20-2015 应该返回一个结果。正确的?请编辑您的问题以澄清。
-
您可能希望从wordpress.org/plugins/query-monitor 安装WP
query-monitor插件并使用它来检查生成的SQL。如果我自己尝试调试,我会这样做。 -
顺便说一句,欢迎来到 Stack Overflow。感谢您发布一个真实的(而且是困难的!)问题。
标签: php mysql wordpress date advanced-custom-fields