SQL:搜索查询以仅获取已发布的父级附件

时间:2012-05-14 作者:Tommixoft

我在创建好的1查询以获得搜索结果时遇到了一些问题,搜索结果不仅包括post\\u类型的post,还包括附件。但如果搜索查询返回附件,我希望如果该附件的父级未发布,则不会返回该附件。

我正在使用ajaxy搜索插件,我想定制它来搜索我想要的东西。我粘贴了适用于我的查询,但我想排除父级未发布的附件。

$results = $wpdb->get_results(
    $wpdb->prepare(
        "select $wpdb->posts.ID,
            $wpdb->posts.post_status,
            $wpdb->posts.post_parent
        from $wpdb->posts
        where post_title like \'%%%s%%\' and
            (post_type=\'albumas\' OR post_mime_type=\'audio/mpeg\') 
            AND (post_status = \'inherit\' OR post_status = \'publish\')
        $excludes limit 0,".$setting->limit,
        ($setting->search_content == true ? array($name, $name):$name)
    )
);                                                                             `
我知道如何做到这一点,但我想在这里获得最优化的代码,而不是执行循环查询来检查post\\u父id,然后检查它是否已发布。我想要尽可能多的性能友好的代码:D

1 个回复
最合适的回答,由SO网友:Tommixoft 整理而成

既然没有人帮助解决一个如此简单的问题,我就用我的方法,如果有人需要它,就在这里:

我使用了以下查询:

$results = $wpdb->get_results(
$wpdb->prepare(
    "select $wpdb->posts.ID,
        $wpdb->posts.post_status,
        $wpdb->posts.post_parent
    from $wpdb->posts
    where post_title like \'%%%s%%\' and
        (post_type=\'albumas\' OR post_mime_type=\'audio/mpeg\') 
        AND (post_status = \'inherit\' OR post_status = \'publish\')
    $excludes limit 0,".$setting->limit,
    ($setting->search_content == true ? array($name, $name):$name)
));
$results不仅返回post ID,还返回post\\u parent,因此我在php代码中使用了condition

if($result->post_parent > 0)
  $pst = get_post($result->post_parent);
然后我检查了是否发布了父帖子:

if($pst != null && $pst->post_status ==\'publish\') {

这不是一个非常理想的版本,但因为插件已经在使用get\\u post,所以我用这种方式做了我想要的。很高兴知道我们如何仅通过SQL查询来实现这一点。

结束

相关推荐

筛选器‘REQUEST’和‘PARSE_QUERY’不会在sites.php或link-ranger.php中触发

我在试着sortable columns 在网站和链接列表管理页面中。/wp-admin/network/sites.php 和/wp-admin/link-manager.php问题是这些屏幕中没有启动以下过滤器,从而阻止了查询修改。是否有其他方法可以使用?function site_category_column_orderby( $vars ) { //global $firephp; //$firephp->log($vars, \'vars\');