仅获取查询中的结果数

时间:2018-03-05 作者:Marc

我只是想展示一下total number 与某些条件(参数)匹配的自定义帖子数。

我是否必须进行整个查询(get\\u posts,query\\u posts…)并获得found_posts 还是有更有效的方法来查询总数?

例如(使用事件插件),

$args = array(
                \'posts_per_page\' => -1,
                \'post_type\' => \'event\',
                \'suppress_filters\' => false,
                \'showpastevents\' => true,
                \'post_status\' => \'published\',
                \'group_events_by\' => \'series\',
                \'meta_query\' => array(
                                    array(
                                    \'key\' => \'_event_public\',
                                    \'value\' => \'1\',
                                    )
                                )
);
$q_posts = get_posts($args);
$alltime_events = count($q_posts);
给了我1344个事件。这不是一个效率低下的查询吗?

编辑:

我已添加\'fields\' => \'ids\' 对于查询参数,只检索ID而不是整个post对象,但我只是猜测这可能会节省一些工作。

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

“效率”问题有三个方面。

从DB方面来看,大部分时间都花在遍历DB表上。如果需要所有行,那么无论返回什么信息,都需要DB遍历所有行。在内存中保存数据可能会带来一定的成本,但相对于遍历成本而言,成本应该可以忽略不计。

对于通信方面,很明显,传输的信息越小,传输完成的速度就越快。很难猜测影响是什么,因为这将取决于DB是否在同一主机上,以及是否对网络质量没有影响。这是您可以而且应该通过使用“fields”=>“ids”来处理的,或者通过创建只返回数字的SQL查询来处理。在我看来,“fields”=>“ids”更符合wordpress代码的预期工作方式,即使它不是最佳的,也应该是首选方式。

如果你do not 指定要返回的特定字段集,如“fields”=>“ids”,默认情况下,wordpress将生成查询,这些查询将初始化与返回的帖子相关的分类法和元缓存,因此,如果您知道您对该信息不感兴趣,则应“将其关闭”。相关标志为cache_results 可用于禁用所有相关缓存,或更具体的update_post_meta_cacheupdate_post_term_cache

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post