Sql 如何使用$wpdb执行多个和/或元查询
场景:我有一个自定义的帖子类型,开始和结束日期保存为帖子元。这是为了允许管理员安排日期来显示和隐藏帖子。还可以选择将这些日期留空,在这种情况下,默认情况下只显示帖子。由于Sql 如何使用$wpdb执行多个和/或元查询,sql,wordpress,Sql,Wordpress,场景:我有一个自定义的帖子类型,开始和结束日期保存为帖子元。这是为了允许管理员安排日期来显示和隐藏帖子。还可以选择将这些日期留空,在这种情况下,默认情况下只显示帖子。由于meta_查询似乎不允许您执行AND/OR比较,因此我尝试了使用$wpdb创建自定义SQL查询。SQL对我来说是一个新领域。目前,这适用于开始日期: $today = date('Y-m-d'); $results = $wpdb->get_results($wpdb->prepare(" SELECT
meta_查询
似乎不允许您执行AND/OR比较,因此我尝试了使用$wpdb创建自定义SQL查询。SQL对我来说是一个新领域。目前,这适用于开始日期:
$today = date('Y-m-d');
$results = $wpdb->get_results($wpdb->prepare("
SELECT
$wpdb->posts.post_title,
$wpdb->posts.ID,
$wpdb->posts.post_content
FROM
$wpdb->posts,
$wpdb->postmeta
WHERE
$wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->posts.post_type = 'announcements'
AND ($wpdb->postmeta.meta_key = 'sap_start_date'
AND ($wpdb->postmeta.meta_value <= '$today' OR $wpdb->postmeta.meta_value = ''))
"));
这将返回一个空数组
问题:我该如何编写此查询来检查
sap\u start\u date
和sap\u end\u date
post meta value?我发现我的问题是,我对同一个meta key对象使用了两次逻辑and;postmeta.meta_key
怎么能等于start_date
和end_date
?使用来自的答案,我设法重新编写查询以使用别名,这样我可以获得两次postemta
,并查询两个不同的键:
SELECT
$wpdb->posts.post_title,
$wpdb->posts.ID,
$wpdb->posts.post_content
FROM
$wpdb->posts,
$wpdb->postmeta AS postmeta1,
$wpdb->postmeta AS postmeta2
WHERE
$wpdb->posts.ID = postmeta1.post_id
AND $wpdb->posts.ID = postmeta2.post_id
AND $wpdb->posts.post_type = 'announcements'
AND (postmeta1.meta_key = 'sap_start_date'
AND (postmeta1.meta_value <= '$today' OR postmeta1.meta_value = ''))
AND (postmeta2.meta_key = 'sap_end_date'
AND (postmeta2.meta_value >= '$today' OR postmeta2.meta_value = ''))
选择
$wpdb->posts.post\u标题,
$wpdb->posts.ID,
$wpdb->posts.post\u内容
从…起
$wpdb->posts,
$wpdb->postmeta作为postmeta1,
$wpdb->postmeta作为postmeta2
哪里
$wpdb->posts.ID=postmeta1.post\u ID
和$wpdb->posts.ID=postmeta2.post\u ID
和$wpdb->posts.post_type='announcements'
和(postmeta1.meta_key='sap_start_date'
和(postmeta1.meta_值='$today'或postmeta2.meta_值='')
这是可行的,尽管我对它的工作原理还不太清楚。如果有人能纯粹出于教育目的进一步阐明这一点,我们将不胜感激
SELECT
$wpdb->posts.post_title,
$wpdb->posts.ID,
$wpdb->posts.post_content
FROM
$wpdb->posts,
$wpdb->postmeta AS postmeta1,
$wpdb->postmeta AS postmeta2
WHERE
$wpdb->posts.ID = postmeta1.post_id
AND $wpdb->posts.ID = postmeta2.post_id
AND $wpdb->posts.post_type = 'announcements'
AND (postmeta1.meta_key = 'sap_start_date'
AND (postmeta1.meta_value <= '$today' OR postmeta1.meta_value = ''))
AND (postmeta2.meta_key = 'sap_end_date'
AND (postmeta2.meta_value >= '$today' OR postmeta2.meta_value = ''))