迪巴拉 发表于 2022-4-13 12:11:31

怎么把Discuz所有用户的积分更新下

discuz很多用户被清空帖子后没有登录 积分没有相应的更新,如何操作把所有用户的积分刷新一下

TyCoding 发表于 2022-4-13 12:12:15

可以定制插件做个批量更新

Discuz智能体 发表于 2025-3-17 17:38:06

在Discuz中,用户的积分是根据其发帖、回帖、登录等行为自动更新的。如果用户的帖子被清空后没有登录,积分可能没有及时更新。你可以通过以下步骤来手动刷新所有用户的积分:

### 方法一:通过SQL语句批量更新用户积分
你可以通过执行SQL语句来批量更新用户的积分。首先,你需要确定用户的积分计算公式,然后根据公式更新用户的积分。

1. **登录数据库管理工具**(如phpMyAdmin)。
2. **选择你的Discuz数据库**。
3. **执行以下SQL语句**:

UPDATE `pre_common_member_count`
SET `extcredits1` = (SELECT COUNT(*) FROM `pre_forum_post` WHERE `authorid` = `pre_common_member_count`.`uid` AND `first` = 1),
    `extcredits2` = (SELECT COUNT(*) FROM `pre_forum_post` WHERE `authorid` = `pre_common_member_count`.`uid` AND `first` = 0),
    `extcredits3` = (SELECT COUNT(*) FROM `pre_forum_post` WHERE `authorid` = `pre_common_member_count`.`uid` AND `invisible` = 0),
    `extcredits4` = (SELECT COUNT(*) FROM `pre_forum_post` WHERE `authorid` = `pre_common_member_count`.`uid` AND `invisible` = -1)

- `extcredits1`、`extcredits2`、`extcredits3`、`extcredits4` 是Discuz中的积分字段,你可以根据你的积分设置调整这些字段。
- `pre_forum_post` 是帖子表,`pre_common_member_count` 是用户积分表。

### 方法二:通过Discuz后台工具更新
Discuz后台提供了一个“更新用户积分”的工具,你可以通过这个工具来批量更新用户的积分。

1. **登录Discuz后台**。
2. **进入“工具” -> “更新统计”**。
3. **选择“更新用户积分”**,然后点击“提交”。
4. 系统会自动根据用户的发帖、回帖等行为重新计算并更新用户的积分。

### 方法三:通过插件或自定义脚本
如果你需要更复杂的积分更新逻辑,可以考虑编写一个插件或自定义脚本来实现。

1. **编写一个PHP脚本**,遍历所有用户并根据其发帖、回帖等行为重新计算积分。
2. **在脚本中调用Discuz的API**来更新用户的积分。

<?php
require_once './source/class/class_core.php';
$discuz = C::app();
$discuz->init();

$query = C::t('common_member')->fetch_all();
foreach ($query as $user) {
    $uid = $user['uid'];
    $post_count = C::t('forum_post')->count_by_authorid($uid, 1);
    $reply_count = C::t('forum_post')->count_by_authorid($uid, 0);
   
    // 根据你的积分公式计算积分
    $extcredits1 = $post_count * 10; // 假设每个主题帖加10分
    $extcredits2 = $reply_count * 5; // 假设每个回复加5分
   
    // 更新用户积分
    C::t('common_member_count')->update($uid, array(
      'extcredits1' => $extcredits1,
      'extcredits2' => $extcredits2,
    ));
}
echo "用户积分更新完成!";
?>

### 注意事项
- **备份数据库**:在执行任何批量操作之前,请务必备份数据库,以防止数据丢失。
- **测试**:在生产环境中执行之前,建议在测试环境中先进行测试,确保脚本或SQL语句的正确性。

通过以上方法,你可以批量更新Discuz用户的积分。如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 怎么把Discuz所有用户的积分更新下