递归函数,我理解为函数内调用自身函数。理解可能不全面,欢迎指正。
从推荐关系表,获取最初推荐人id。推荐关系是无限的,无限是指,A是B推荐的,B是C推荐的,C是D推荐的… 直到N没有任何推荐人。因为,推荐关系表只存储了直接推荐关系,需要递归获取最初推荐人id。
user_inviter_relation推荐关系表 结构如下(纯属虚构,如有雷同纯属巧合):
user_id:用户id
user_name:用户名
create_time:创建时间
inviter_id:推荐人id
inviter_name:推荐人名
invite_num:推荐人序列(当推荐人序列为0,表示该推荐人没有推荐人,是最初的推荐人)
| id | user_id | user_name | create_time | inviter_id | inviter_name | invite_num |
|---|---|---|---|---|---|---|
| 432 | 123456 | 赵四 | 2021-03-01 09:00:01 | 456789 | 尼古拉斯 | 3 |
| 569 | 456789 | 尼古拉斯 | 2021-02-15 09:00:01 | 258369 | 刘小光 | 0 |
# -*- coding: utf-8 -*-
### Python 3.7
import pymysql
"""
第一步:从MySQL数据库获取数据
第二步:递归函数 获取最初邀请人
"""
def all_query(sql,database='abc'):
connection=pymysql.connect(host='abc123',port=3306,user='admin',password='asdfghj',db=database,charset='utf8')
cur = connection.cursor()
sql_select = sql
cur.execute(sql_select)
result = cur.fetchall()
col_result = cur.description
#获取字段信息
columns = []
for i in range(len(col_result)):
columns.append(col_result[i][0])
#插入数据
data=[]
for i in range(len(result)):
result_dict=dict(zip(columns,list(result[i])))
data.append(result_dict)
cur.close()
return data
user_sql="""
select
user_id,inviter_id,invite_num
from user_inviter_relation
"""
query=all_query(user_sql)
# query 是list格式存储,转为以user_id为key的字典
def list_to_dict(result):
_dict={}
for index,item in enumerate(result):
_dict[item ['user_id']]=[item ['inviter_id'],b['invite_num']]
return _dict
all_info=list_to_dict(query)
def recursion(user_id,query,all_info):
chain_dict={}
for index,item in enumerate(query):
# 如果传入的user_id参数,在query里
if user_id== item['user_id']:
# 当推荐人序列为0时,该推荐人为最初的推荐人
if item['inviter_level'] == 0:
chain_dict[user_id] =item['inviter_id']
# 当推荐人序列不为0时,该推荐人不是最初推荐人,获取该推荐人的推荐人信息,一直递归,直到第N个推荐人序列为0,找到最初的推荐人
elif item['invite_num'] != 0:
chain_dict[user_id] = [item['inviter_id'],item['invite_num']]
chain_dict[user_id][0] = all_info[chain_dict[user_id][0]][1]
chain_dict[user_id][1]= all_info[chain_dict[user_id][0]][2]
return recursion(user_id,query,all_info)
return chain_dict
test=recursion(123456,query,all_info)
print(test)
本文介绍了一种使用Python和MySQL结合递归方法查询多级推荐关系中最初推荐人的实现方案。通过递归函数遍历推荐关系表,直到找到邀请序列号为0的最初推荐人。

被折叠的 条评论
为什么被折叠?



