带参数统计帖子而不检索帖子

时间:2017-08-24 作者:Aschab

我有一个相当广泛的数据库,30000多个项目,并使用此数据库:

$args = array(
    \'posts_per_page\'  => -1,
    \'post_type\'       => \'books\',
    \'s\'               => $s
);

$post_counts = count(get_posts($args));
似乎要花很长时间。

I solved this particular case with:

$post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = \'books\' AND post_status = \'publish\' AND post_title LIKE \'%".$s."%\'");
但我有很多查询,我想计算一下,而不必手写。是否有任何方法可以使用wordpress本机函数对带有$args的帖子进行计数,而不必存储整个查询,而只存储计数?

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

你可以做一件事。创建WP\\U查询对象,但仅包括ID:

$args = array(
    \'posts_per_page\'    => -1,
    \'post_type\'         => \'books\',
    \'s\'                 => $s,
    \'fields\'            => \'ids\',
);

$query          = new WP_Query( $args );
$post_counts    = $query->post_count;
wp_reset_postdata();
通过使用fields => ids 您只返回ID。此外,WP\\u Query已经进行了计数,并将其作为属性提供:post_count. 最后,由于我们使用的是WP\\u查询,因此需要使用wp_reset_postdata().

SO网友:birgire

什么时候WP_Query 使用生成SQL查询SQL_CALC_FOUND_ROWS 和aLIMIT 条款:

SELECT SQL_CALC_FOUND_ROWS ... FROM ...  WHERE ...  LIMIT ...
然后是总行数:

SELECT FOUND_ROWS();
可从found_posts 的属性WP_Query.

这意味着我们可以通过以下方式获取单个帖子:

\'posts_per_page\' => 1 // not -1
并从中获取总计数

$total = $query->found_posts;
在哪里$queryWP_Query 对象

来自MySQLdocumentation:

FOUND\\u ROWS():

对于带有LIMIT子句的SELECT,如果没有LIMIT子句,将返回的行数

它还可以提供信息WP_Query::set_found_posts() 看看found_posts 构建属性。

SO网友:Anton Lukin

$wpdb->num_rows 参数但我建议你用

$wpdb->get_var("SELECT COUNT(*) ... )
如果我没弄错的话,这应该快得多。它与mysql内部函数相关。

进行计数时,服务器将只分配内存来存储计数结果。使用mysql\\u num\\u行时,服务器将处理整个结果集,并为所有这些结果分配内存

结束

相关推荐

如何使用wpdb从表中拉取数据?

我创建了一个新的数据库连接:$mydb=new wpdb(db info)我知道它可以连接,但由于某种原因,我无法从以下位置获取任何数据:$pulled = $mydb->get_results($mydb->prepare($query), \"ARRAY_A\"). 我知道它自己写的查询是正确的,但由于某种原因$pull不包含任何数据。任何人有任何建议或解决方案,请和谢谢你。