You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计按用户名+邮箱分组的所有评论数量(SQL)

按用户名+邮箱分组统计WordPress评论数

现有评论表结构及数据

comment_IDcomment_authorcomment_author_email
100Maxmax@gmail.com
101Maxmax2@gmail.com
102Pierrepierre@gmail.com
103Maxmax@gmail.com
104Sam
105Maxmax@gmail.com

期望输出结果

Max: 3  /* 对应邮箱max@gmail.com */
Max: 1  /* 对应邮箱max2@gmail.com */
Pierre: 1
Sam: ignore (because no email exists)

当前单个用户统计代码

global $wpdb;
$count = $wpdb->get_var('
    SELECT COUNT(comment_author)
    FROM ' . $wpdb->comments . '
    WHERE comment_author_email = "' . get_comment_author_email() . '"
');
echo $count . ' comments';

需求

实现按用户名+邮箱分组统计所有评论数量,同时忽略无邮箱的评论(如Sam的记录)。

解决方案

核心SQL语句

通过GROUP BY同时按用户名和邮箱分组,过滤掉邮箱为空的记录,用主键comment_ID统计每组评论数(更严谨):

SELECT 
    comment_author, 
    comment_author_email, 
    COUNT(comment_ID) AS comment_count
FROM 
    wp_comments
WHERE 
    comment_author_email != ''  -- 排除无邮箱的记录
GROUP BY 
    comment_author, 
    comment_author_email
ORDER BY 
    comment_author, 
    comment_count DESC;

WordPress适配代码

用$wpdb->get_results()获取所有分组结果,循环输出成期望格式,同时单独处理无邮箱的用户:

global $wpdb;

// 获取有邮箱用户的分组统计结果
$results = $wpdb->get_results("
    SELECT 
        comment_author, 
        comment_author_email, 
        COUNT(comment_ID) AS comment_count
    FROM 
        {$wpdb->comments}
    WHERE 
        comment_author_email != ''
    GROUP BY 
        comment_author, 
        comment_author_email
    ORDER BY 
        comment_author, 
        comment_count DESC
");

// 输出有邮箱用户的统计
foreach ($results as $row) {
    echo "{$row->comment_author}: {$row->comment_count}";
    // 可选:显示对应邮箱的备注,取消下面注释即可
    // echo " /* 对应邮箱{$row->comment_author_email} */";
    echo "<br>";
}

// 获取并输出无邮箱的用户提示
$no_email_users = $wpdb->get_results("
    SELECT DISTINCT comment_author
    FROM {$wpdb->comments}
    WHERE comment_author_email = ''
");
foreach ($no_email_users as $user) {
    echo "{$user->comment_author}: ignore (because no email exists)<br>";
}

关键说明

  • 用COUNT(comment_ID)替代COUNT(comment_author),避免因用户名为空导致的统计误差,更严谨。
  • GROUP BY comment_author, comment_author_email确保同一用户名但不同邮箱的记录被分开统计(如Max的两个分组)。
  • 过滤条件comment_author_email != ''直接排除无邮箱的评论,符合需求中忽略Sam的要求。

内容的提问来源于stack exchange,提问作者Pepe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:42:37