php分销关系实现
PHP分销关系实现
分销系统的核心在于多级关系的建立和管理,通常涉及用户邀请、层级记录和佣金计算。以下是实现分销关系的常见方法:
数据库设计
创建用户表时添加parent_id字段记录上级关系:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
parent_id INT NULL, -- 直接上级ID
level_path VARCHAR(255) -- 层级路径如 ,1,3,5,
);
邀请注册逻辑 用户注册时通过邀请链接获取上级ID:
// 获取邀请人ID
$inviter_id = isset($_GET['ref']) ? (int)$_GET['ref'] : 0;
// 插入用户数据
$stmt = $pdo->prepare("INSERT INTO users (username, parent_id) VALUES (?, ?)");
$stmt->execute([$username, $inviter_id]);
层级关系更新 使用触发器或代码更新层级路径:
function updateUserLevelPath($user_id) {
$path = '';
$current_id = $user_id;
while($parent = getParent($current_id)) {
$path = ",{$parent['id']}" . $path;
$current_id = $parent['id'];
}
$pdo->prepare("UPDATE users SET level_path = ? WHERE id = ?")
->execute([$path, $user_id]);
}
佣金计算示例 根据层级关系计算多级佣金:
function calculateCommission($order_amount, $user_id) {
$user = $pdo->query("SELECT level_path FROM users WHERE id = $user_id")->fetch();
$parents = explode(',', trim($user['level_path'], ','));
$rates = [0.3, 0.2, 0.1]; // 三级分佣比例
foreach($parents as $level => $parent_id) {
if(isset($rates[$level])) {
$commission = $order_amount * $rates[$level];
// 记录佣金明细
recordCommission($parent_id, $commission, $level+1);
}
}
}
性能优化建议
- 使用
level_path字段实现快速层级查询 - 对超过3层的深度关系考虑使用定时任务异步处理
- 建立佣金结算记录表实现数据追溯
安全注意事项
- 严格验证邀请人ID防止伪造
- 佣金计算使用事务保证数据一致性
- 敏感操作记录详细日志
实现完整分销系统还需结合具体的业务规则,如佣金提现、团队统计等功能。上述代码提供了基础框架,实际应用中需要根据具体需求调整数据库结构和业务逻辑。







