将数组传递给where p.id的自定义SQL查询

时间:2014-05-08 作者:EHerman

我需要将post ID数组传递给我在某个页面上运行的自定义SQL查询。

查询如下所示:

$querystr3 = "SELECT *, 
    events_startdate.meta_value AS the_start,
    events_enddate.meta_value AS the_end
    FROM $wpdb->posts p
    LEFT JOIN $wpdb->term_relationships 
        ON ( p.ID = $wpdb->term_relationships.object_id )
    LEFT JOIN $wpdb->term_taxonomy 
        ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id )
    LEFT JOIN $wpdb->postmeta AS events_startdate 
        ON ( 
            p.ID = events_startdate.post_id 
            AND events_startdate.meta_key = \'events_startdate\' 
        )
    LEFT JOIN $wpdb->postmeta AS events_enddate 
        ON(
            p.ID = events_enddate.post_id 
            AND events_enddate.meta_key = \'events_enddate\' 
    ) 
    WHERE ($wpdb->term_taxonomy.term_id = 11
        AND $wpdb->term_taxonomy.taxonomy = \'status\'
        AND p.ID != array(1433, 1344) <--- trying to pass array here
        AND p.post_type = \'pmg_events\'
        AND p.post_status = \'publish\'
        AND events_startdate.meta_value != \'\'
        AND events_enddate.meta_value != \'\'
        AND events_enddate.meta_value >= CURDATE()
    )
    ORDER BY events_enddate.meta_value ASC
";      
$theresults3 = $wpdb->get_results($querystr3 );
如您所见,我正在尝试传递2个post ID以从正在运行的自定义SQL查询中排除。如果我传入一个号码,即:p.ID!=1433它可以工作,但传入多个post ID却不行。

我试过使用implode(\',\',$ids); 但仍然无济于事。不可能传入这样的数组吗。我不想重新编写此文件以供使用$wp_query.

1 个回复
SO网友:birgire

这更像是一个SQL问题,而不是WordPress问题。

以下是一些想法:

您很可能正在寻找这种结构:

AND p.ID NOT IN (1433, 1344)
您应该考虑使用$wp->prepare() 如果您的查询依赖于某些用户输入。

您可能还需要替换CURDATE() 使用PHP生成的日期字符串,看看它是否能提高性能。

一般来说,使用WP_Query() 尽可能避免这种硬编码的SQL混蛋;-)

结束

相关推荐

get_post_meta with WP_query

我知道这是一个复杂的循环(继承自其他人),这一定很简单:the_permalink 和the_title 显示OK,但为什么我的post metaeventdatestart 回响<?php $queryObject = new WP_Query( \'post_type=events&posts_per_page=5\' ); if ($queryObject->have_posts()) { ?> <div id=\"wrapper\"\