WordPress技术问题:如何在$wpdb中加入用户ID以筛选查询结果?
解决方案:按用户ID筛选并求和指定元数据
当然可以实现你的需求!要统计特定用户相关的_heart_this元数值总和,我们需要根据元数据的存储位置(文章元数据/用户元数据)来调整SQL查询,下面分两种常见情况说明:
情况1:统计特定用户发布的文章的_heart_this总和
如果_heart_this是存储在文章元数据表(wp_postmeta)中,代表每篇文章的点赞/收藏类数值,要计算某用户所有文章的总和,我们需要关联wp_posts表来筛选作者ID:
<?php global $wpdb; $meta_key = '_heart_this'; $target_user_id = 123; // 替换成你要指定的目标用户ID // 关联postmeta和posts表,筛选目标用户的文章并求和 $all_downloads = $wpdb->get_var($wpdb->prepare( "SELECT SUM(pm.meta_value) FROM $wpdb->postmeta pm INNER JOIN $wpdb->posts p ON pm.post_id = p.ID WHERE pm.meta_key = %s AND p.post_author = %d", $meta_key, $target_user_id )); // 处理空结果,避免输出NULL echo $all_downloads ?? 0; ?>
关键细节:
- 用
INNER JOIN确保只统计存在对应文章的有效元数据,过滤无效的孤立记录 - 通过
%d占位符处理用户ID(整数类型),配合prepare方法防止SQL注入,这是WordPress数据库操作的标准安全实践 - 如果
meta_value可能混入非数值内容,可以在WHERE条件里追加pm.meta_value REGEXP '^[0-9]+$',确保只计算有效的数值型数据
情况2:统计特定用户自身的_heart_this元数据总和
如果_heart_this是存储在用户元数据表(wp_usermeta)中,代表用户自身的某项累计数值,直接查询用户元数据表即可:
<?php global $wpdb; $meta_key = '_heart_this'; $target_user_id = 123; // 替换成目标用户ID $all_downloads = $wpdb->get_var($wpdb->prepare( "SELECT SUM(um.meta_value) FROM $wpdb->usermeta um WHERE um.meta_key = %s AND um.user_id = %d", $meta_key, $target_user_id )); echo $all_downloads ?? 0; ?>
你可以根据自己的实际业务场景选择对应的代码,替换$target_user_id为你需要指定的用户ID即可。
内容的提问来源于stack exchange,提问作者robert0
相关产品推荐
相关产品推荐

