56,677
社区成员
发帖
与我相关
我的任务
分享
table_user
id user shangjiaid vip
1 用户A 2 0
2 用户B 3 0
3 用户C 2 0
4 用户D 5 0
5 用户E 5 0
6 用户F 5 0
7 用户G 2 0
8 用户H 5 0
9 用户J 2 0
10 用户K 5 0
11 用户K 5 0
12 用户K 7 0
13 用户K 12 0
更新VIP等于1
比如 id=5的这个人 下家的数量满足3个 然后更新vip=1
用一句sql能update更新? 这个应该属于递归...
就是说每个人都有上家...如果这个人下家满足3个人..然后更新VIP=1
update结果集
table_user
id user shangjiaid vip
5 用户E 5 1
2 用户B 3 1
-- 示例数据
drop table if exists table_user;
create table table_user(id int, user varchar(10), shangjiaid int, vip bit);
insert table_user values
(1, '用户A', 2, 0),
(2, '用户B', 3, 0),
(3, '用户C', 4, 0),
(4, '用户D', 5, 0),
(5, '用户E', 5, 0),
(6, '用户F', 5, 0),
(7, '用户G', 2, 0),
(8, '用户H', 5, 0),
(9, '用户J', 2, 0),
(10, '用户K', 5, 0),
(11, '用户K', 5, 0),
(12, '用户K', 7, 0),
(13, '用户K', 12, 0);
select * from table_user;
-- 统计下家数的函数
drop function if exists f_ChildCount;
delimiter $$
create function f_ChildCount( vId int )
returns int
begin
declare vCount int default 0;
declare vIds varchar(4000) default cast(vId as char);
REPEAT
select group_concat(id), vCount+count(*) into vIds,vCount from table_user
where find_in_set(shangjiaid,vIds)>0 and shangjiaid<>id;
UNTIL( vIds is null) END REPEAT;
return vCount;
end$$
delimiter ;
-- 查询下家数,更新就不用说了吧,判断一一下函数返回值即可
select *,f_ChildCount(id) from table_user;