当前位置:首页 > PHP

php分销关系实现

2026-01-29 02:33:05PHP

PHP分销关系实现

分销系统的核心在于建立多级用户关系链,并通过佣金计算实现利益分配。以下是基于PHP的实现方案:

数据库设计

用户表需包含分销关系字段:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `parent_id` int(11) DEFAULT NULL COMMENT '上级ID',
  `level` tinyint(4) DEFAULT 0 COMMENT '分销层级',
  `path` varchar(255) DEFAULT NULL COMMENT '关系路径(如:1,3,5)',
  PRIMARY KEY (`id`),
  INDEX `parent_id` (`parent_id`)
);

订单表需记录分佣信息:

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `amount` decimal(10,2) NOT NULL,
  `commission_status` tinyint(1) DEFAULT 0,
  PRIMARY KEY (`id`)
);

佣金记录表:

CREATE TABLE `commissions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `level` tinyint(4) NOT NULL COMMENT '分销层级',
  `amount` decimal(10,2) NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
);

关系链建立

用户注册时绑定上级关系:

function registerUser($username, $parentId = 0) {
    $parentPath = '';
    if ($parentId > 0) {
        $parent = $db->query("SELECT path FROM users WHERE id = $parentId");
        $parentPath = $parent['path'] ? $parent['path'].','.$parentId : $parentId;
    }

    $level = $parentPath ? count(explode(',', $parentPath)) : 0;
    $db->insert('users', [
        'username' => $username,
        'parent_id' => $parentId,
        'level' => $level,
        'path' => $parentPath
    ]);
}

佣金计算逻辑

订单支付成功后触发分佣:

function handleCommission($orderId) {
    $order = $db->query("SELECT * FROM orders WHERE id = $orderId");
    $user = $db->query("SELECT path FROM users WHERE id = {$order['user_id']}");

    if (empty($user['path'])) return;

    $parentIds = explode(',', $user['path']);
    $commissionRules = [
        1 => 0.10, // 一级分佣10%
        2 => 0.05,  // 二级分佣5%
        3 => 0.02   // 三级分佣2%
    ];

    foreach ($parentIds as $level => $parentId) {
        $currentLevel = $level + 1;
        if (!isset($commissionRules[$currentLevel])) continue;

        $commission = $order['amount'] * $commissionRules[$currentLevel];
        $db->insert('commissions', [
            'order_id' => $orderId,
            'user_id' => $parentId,
            'level' => $currentLevel,
            'amount' => $commission,
            'create_time' => date('Y-m-d H:i:s')
        ]);
    }

    $db->update('orders', ['commission_status' => 1], "id = $orderId");
}

性能优化方案

使用闭包表存储关系:

CREATE TABLE `user_relations` (
  `ancestor` int(11) NOT NULL,
  `descendant` int(11) NOT NULL,
  `depth` int(11) NOT NULL,
  PRIMARY KEY (`ancestor`,`descendant`)
);

批量插入关系数据:

php分销关系实现

function rebuildRelationTree() {
    $db->query("TRUNCATE user_relations");
    $users = $db->queryAll("SELECT id, path FROM users");

    foreach ($users as $user) {
        if (empty($user['path'])) continue;

        $pathIds = explode(',', $user['path']);
        foreach ($pathIds as $depth => $ancestorId) {
            $db->insert('user_relations', [
                'ancestor' => $ancestorId,
                'descendant' => $user['id'],
                'depth' => $depth + 1
            ]);
        }
    }
}

安全注意事项

  1. 防止循环引用:在绑定上级时检查关系链是否形成闭环
  2. 佣金提现需进行人工审核
  3. 敏感操作记录日志
  4. 定期备份关系数据

实现时可根据业务需求调整分佣层级比例,建议结合缓存机制优化关系查询性能。对于大规模用户体系,考虑使用图数据库处理复杂关系网络。

标签: 关系php
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class Ani…

php无法实现

php无法实现

PHP 是一种功能强大的服务器端脚本语言,能够实现多种功能,包括动态网页开发、数据库交互、文件操作等。如果遇到“无法实现”的问题,通常是由于以下原因之一: 环境配置问题 确保 PHP 环境正确安装和…

php 抢购实现

php 抢购实现

抢购系统设计要点 高并发抢购系统的核心在于解决超卖问题、保证数据一致性以及提升系统性能。PHP实现需结合数据库、缓存和队列等技术。 数据库层面优化 使用InnoDB引擎的事务特性确保数据一致性。商品…