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

标签 mysql wordpress

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

  1. 我的连接是否可以将 posts 表连接到 wp_popularpostsdata wp_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/

相关文章:

php - 生成一个唯一的哈希值,可以用php作为mysql中的主键

html - Wordpress 中的主题 CSS 选择元素冲突

css - 将元素背景设置为透明使其变白

mysql - Grails中的SQL查询从两个具有外键关系的表中获取所有数据

java - 在 Android 中使用 MySQL

php - 如何从 MYSQL 显示用户的电子邮件地址?

python - 值错误 : Unable to configure filter 'require_debug_false' : Cannot resolve 'django.utils.log.RequireDebugFalse' : No module named RequireDebugFalse

mysql - 如果不为空,则将旧的 WordPress 帖子内容替换为新内容

mysql - WordPress-MySQL 在 :' Unknown column ' 中表示 'on clause' users.ID'

html - 知道为什么这在 H​​TML/CSS 中无缝工作,但在 wordpress 中却没有吗?