积分与等级体系需分离成长值与积分,以行为触发闭环流程,通过users、user_levels、user_exp_log三表协同实现配置化管理与自动升降级。

积分与等级体系的核心设计原则
用户积分和等级不是简单加减数字,而是行为激励的杠杆。关键在于让积分可获得、可感知、可兑换,等级有明确门槛和对应权益。PHP后端需支撑“行为触发→积分计算→等级校验→状态更新→通知反馈”这一闭环,避免硬编码业务规则,用配置驱动逻辑。
数据库结构建议(精简实用)
不建议把积分、等级、成长值全塞进用户主表。推荐三张基础表协同:
- users:保留基础字段(id, username, password_hash等),只存当前积分总数和当前等级ID
- user_levels:定义等级体系(id, level_name, min_exp, icon_path, privileges_json)——min_exp是累计成长值下限,非积分值
- user_exp_log:记录每次成长值变动(id, user_id, exp_change, reason_code, related_id, created_at)——reason_code用英文标识行为类型(如"login_daily", "order_paid", "comment_post")
PHP核心逻辑:成长值驱动等级自动升降
积分(points)用于兑换,成长值(experience/exp)决定等级。两者分离更灵活:签到送10积分+5成长值,购物返20积分+50成长值。等级升级逻辑应封装为独立方法:
- 每次写入user_exp_log后,调用
updateUserLevel($userId) - 该方法查出用户当前总成长值 → 匹配user_levels中≤该值的最大min_exp记录 → 得到新等级ID
- 仅当新等级 ≠ 原等级时,更新users.level_id,并触发等级变更事件(如发站内信、解锁新功能权限)
前端与配置化支持要点
运营人员需随时调整规则,PHP应提供简单配置入口(如JSON文件或管理后台表):
立即学习“PHP免费学习笔记(深入)”;
- 行为映射表:
['login' => ['points'=>10, 'exp'=>5], 'share' => ['points'=>30, 'exp'=>20]] - 等级图标、昵称前缀、专属客服通道等权益,存在user_levels.privileges_json里,前端按需解析展示
- 积分流水页、成长值进度条、等级特权说明页,统一通过API返回结构化数据,不拼HTML



















