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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:27:46