【PHP】查询用户的直推、非直推、二级、三级、团队人数示例

目录

1.构建公共函数,命名为team

2.使用方法,以yii2为例


首先在你的user表需要有一个字段串联推荐关系,如:

  • 我的id是666
  • 上级关系字段是superior
  • 字段值是:333_222_111 或 333,222,111

1.构建公共函数,命名为team


php 复制代码
<?php
/**
 * @author zzoood
 */
namespace common\querys;
class UserQuery extends BaseQuery
{
    public function team($uid, $level = 1, $column = 'superior') {
        if ($level == 1) {//直推
            $this->andWhere("$column REGEXP '^{$uid}_'");
        } elseif ($level == 2) {//非直推
            $this->andWhere("$column REGEXP '_{$uid}_'");
        } elseif ($level == 3) {//团队(直推 + 非直推)
            $this->andWhere("$column REGEXP '^{$uid}_|_{$uid}_'");
        } elseif ($level == 12) {//二级
            $this->andWhere("$column REGEXP '^[0-9]+_{$uid}_'");
        } elseif ($level == 13) {//三级
            $this->andWhere("$column REGEXP '^[0-9]+_[0-9]+_{$uid}_'");
        }
        return $this;
    }
}

参数说明:

  • $uid:用户ID,用于匹配团队关系中的上级或下级。

  • $level:整数型参数,默认为1,表示要查找的团队层级。不同的值对应不同的层级关系:

    • 1:直推,即直接推荐的下级,其superior字段以 $uid 开头并跟随下划线。
    • 2:非直推,即不是直接推荐但存在间接推荐关系,其superior字段中包含 $uid 并且 $uid 前后均有其他数字和下划线。
    • 3:团队,包括直推及所有间接推荐的下级,其superior字段以 $uid 开头或在任意两个数字之间包含 $uid
    • 12:二级,表示与 $uid 直接间隔一级的下级,其superior字段以至少一个数字开头,然后是 $uid,之后再跟一个下划线。
    • 13:三级,表示与 $uid 直接间隔两级的下级,其superior字段以至少两个数字开头,每个数字间用下划线分隔,最后是 $uid
  • $column:字符串类型,默认为 'superior',表示用于存储上下级关系的字段名。

在函数内部,根据传入的 $level 参数使用正则表达式来设置查询条件,并将其添加到当前查询对象中。最后返回当前查询对象以便进行链式调用,进一步完成查询过程。

2.使用方法,以yii2为例


php 复制代码
$teamMembers = User::find()->team(111, 2)->all();

这条语句会查询出与用户ID为111有间接推荐关系(非直推)的所有团队成员记录。

相关推荐
ServBay1 天前
告别面条代码,PSL 5.0 重构 PHP 性能与安全天花板
后端·php
JaguarJack3 天前
FrankenPHP 原生支持 Windows 了
后端·php·服务端
BingoGo4 天前
FrankenPHP 原生支持 Windows 了
后端·php
JaguarJack5 天前
PHP 的异步编程 该怎么选择
后端·php·服务端
BingoGo5 天前
PHP 的异步编程 该怎么选择
后端·php
JaguarJack5 天前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay6 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954486 天前
CTF 伪协议
php
BingoGo9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack9 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端