gpt4 book ai didi

mysql - 使用 posts_groupby 的 WordPress wp_query 过滤器 - 如何对连接表中的值求和?

转载 作者:行者123 更新时间:2023-11-30 00:54:35 25 4
gpt4 key购买 nike

有人可以帮我解决一个疯狂的 WordPress 问题吗?我正在使用 wordpress 的 add_filter 为我的 wp_query 加入第二个表,并且我试图通过 pageviews 列(来 self 安装的插件)对 group_by 进行查询,并对它们求和以作为我的输出。我设法对结果进行分组,但结果集仅显示其中一个值。我想知道两件事。

  1. 我的连接是否可以将 posts 表连接到 wp_popularpostsdatawp_popularpostsdata 表将有多个表每个帖子的条目->ID?
  2. 如何使用 SUM 函数,因为我在文档中的任何地方都看不到它法典?

我必须使用 wp_query,而不是 query_posts,因为这是我的客户端模板中用于其余输出的内容。我尝试使用 wppp.postid 作为我的 groupby 但它没有返回任何结果。这是我的代码,希望它更有意义。

我的网站插件中的功能:-

            function add_filter_7dayspopular(){
add_filter('posts_where', 'edit_posts_where');
add_filter('posts_join','edit_posts_join');
add_filter('posts_groupby','edit_posts_groupby');
add_filter('posts_orderby','edit_posts_orderby');

function edit_posts_join($join_statement) {
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
$join_statement .= "LEFT JOIN wp_popularpostsdata wppp ON $wpdb->posts.ID = wppp.postid";
return $join_statement;
}

function edit_posts_where($where_statement) {
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
$where_statement .= " AND wppp.last_viewed > '" . date('Y-m-d', strtotime('-7 days')) . "'";
return $where_statement;
}

function edit_posts_groupby($groupby_statement) {
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
$groupby_statement = "{$wpdb->posts}.ID";
return $groupby_statement;
}

function edit_posts_orderby($orderby_statement){
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
$orderby_statement = "wppp.pageviews DESC";
return $orderby_statement;
}
}

这是我的新 wp_query 代码:-

            add_filter_7dayspopular();
$args = array(
'post_type' => array(
'post',
'portfolio'
),
'post__not_in' => $itemArray,
'posts_per_page' => $load_more,
'post_status'=>'publish',
'orderby' => 'pageviews',
'order' => 'DESC',
'paged' => $paged
);

谢谢大家。

标记

楼手完整回答了问题。运行代码后,字段 $post_.total_views 可在我的循环中使用。这是他们的代码,我自己做了一点小改动:-

            // change your orderby function to order by the sum
function edit_posts_orderby($orderby_statement){
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
// add sum() around the field name
$orderby_statement = 'sum(wppp.pageviews) DESC';
return $orderby_statement;
}

// add a posts_fields function
function edit_posts_fields($fields_statement) {
global $wpdb;
remove_filter( current_filter(), __FUNCTION__ );
$fields_statement .= ', sum(wppp.pageviews) as total_views';
return $fields_statement;
}

最佳答案

答案

  1. 您可以完全按照这样的方式进行操作,但是随着您网站的增长,此查询将需要很长时间才能运行
  2. 要对页面 View 求和并按总和排序,请执行以下两件事:
// change your orderby function to order by the sum
function edit_posts_orderby($orderby_statement){
remove_filter( current_filter(), __FUNCTION__ );
// add sum() around the field name
$orderby_statement = "sum(wppp.pageviews) DESC";
return $orderby_statement;
}

// add a posts_fields function
function edit_posts_fields($fields) {
remove_filter( current_filter(), __FUNCTION__ );
$fields .= ', sum(wppp.pageviews) as total_views';
return $fields;
}

关于mysql - 使用 posts_groupby 的 WordPress wp_query 过滤器 - 如何对连接表中的值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20691964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com