微信三级分销程序关于会员关系的设计

8529人阅读 评论(9) 收藏 举报
分类:

最近几年微信公众号三级分销程序挺火的,关于微信的程序开发,功能点比较多,如消息推送、自定义菜单,jssdk集成,支付接口等等,这些都可以到官方查阅文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN,本文主要讨论一下会员三级关系的数据库设计。从优化角度来重新设计。


首先看一下传统的表设计


以下是一张会员信息表,这里WxId是微信公众号的id(因我设计的这个程序是要支持多个微信公众号的),UserId是当前会员id,下图中的Pid就是会员的上一级用户id

下面看一下数据:


根据上图,userid=1的这个会员Pid为0的说明会员是顶级的,没有任何人推广。userid=2的这个会员pid为1,说明他是userid为1的会员推广而来。然后看userid=7的这个会员,他的pid=2,说明他是userid=2的这个会员推广来。说白了推广关系就是:

userid(1)->userid(2)->userid(7)

userid(1)->userid(3)

userid(1)->userid(4)

userid(1)->userid(5)

userid(1)->userid(6)

那么我们要查询一个会员(假设他的id为1)所有的推广一级会员,对应的sql就是:select * from t_user where Pid=1,这里没有什么问题,到是不难

那继续来,要查询他的二级或是三级分销会员的话,就麻烦了,需要使用子循环了。对应的代码如下:

public String gets(int pid){

  StringBuffer sb=new StringBuffer(sb);

  ArrayList list=(ArrayList)DaoFactory.getUserDAO().exe("select id,Pid from t_user where Pid="+pid);

  for (Iterator iter = list.iterator(); iter.hasNext(); ) {
        DataField df=(DataField)iter.next();

  sb.append("<li>"+df.getInt("id")+"</li>");

//递归调用

sb.append(gets(df.getInt("id")));

  }

}

上面看到了,主要解决办法就是递归调用。虽然功能也能实现,但在数量比较大的情况下,很容易产生性能问题(这里只是查找会员,如果在统计每个级别下会员的消费,收入统计时,需要和消费表关系查询,那性能不知卡到什么时候)。

下面重点来了,我们重新设计一下表,这里我们主要是通过数据库设计来解决,我们知道数据库存储数量量不怕多,于是我们想,可以这样,每当用户推广一个会员的时候,我们向一个表(暂且叫作用户关系表)写入他的级别关系不就行了吗。比如 a推广了b,然后b推广了c,c推广了d,这样我我们就向数据库中写一个记录b以上三级的关系。

看一下表中的数据


上图中,除了原来的会员表,我们新增加了个会员关系表:t_user_relations

这里看到,ChildId=2的这个会员,他是id为1(Pid=1)的一级分销用户(FxLevel=1)

ChildId=7的这个会员,数据库中有两条记录,一个是:他是id为2(Pid=2)的一级分销用户(FxLevel=1),再就是他是id为1(Pid=1)的二级分销用户(FxLevel=2),所以不难理解,如果一个会员上面有三级的话,这里应该有三条记录。简单理解就是,当用户新增加时,将此用户上面所有级别对应的用户信息记录到用户关系表中。

这样,当我们要查询一个会员所有一级会员时,可以使用sql:select * from t_user_relations where Pid=1 and FxLevel=1

所有二级会员sql:select * from t_user_relations where Pid=1 and FxLevel=2

所有三级会员sql:select * from t_user_relations where Pid=1 and FxLevel=3

当我们需要统计三级会员的消费总额的时候,可以很方便使用sql:select sum(t_pay.Money) from t_user_relations,t_pay where t_user_relations.ChildId=t_pay.Userid and t_user_relations.Pid=1 and t_user_relations.FxLevel=3

同理查询二级会员的消费:select sum(t_pay.Money) from t_user_relations,t_pay where t_user_relations.ChildId=t_pay.Userid and t_user_relations.Pid=1 and t_user_relations.FxLevel=2

那要查询所有子会员的消费怎么办?总不能写三个sql吧,当然不会了。使用条件FxLevel>0不就可以了吗:)

select sum(t_pay.Money) from t_user_relations,t_pay where t_user_relations.ChildId=t_pay.Userid and t_user_relations.Pid=1 and t_user_relations.FxLevel>0


这样一个sql就解决了。如果使用一开始使用的递归方法,随着数据量的增长,速度会非常非常的糟糕。

上面你还可能 还会问一个问题,那如果知道某个会员他是谁的一级,谁的二级呢,.....?这需要用到第一个方法设计的表了,看到了,上面的表设计我们还是要用到:)

select Pid from t_user where id=2

if(Pid!=0)说明还不是顶级,继续查。这里可以 使用递归查询或做三次查询(通过 pid是否为0,这样有的可能只是一级或两次查询,最多就是3次),放心,这样的不会太影响性能的,可以忽略不计。

或者把id,pid数据放到缓存里,redis是个不错的选择。大家可以试下了。

最后看一下偶开发的效果:)



查看评论

TPshop分销功能的使用与表设计

首先来段科普,摘自百度百科: 在西方经济学中,分销 的含义是建立销售渠道的意思,根据著名的营销大师菲利普·科特勒的定义,分销渠道(Distribution Channel)又或者叫营销渠道(Ma...
  • e62ces0iem
  • e62ces0iem
  • 2017-06-08 21:32:22
  • 2162

浅析三级分销模式

最近微信分销模式很火爆,需求量很大!那什么是三级分销呢? 我对这个东西并不感冒,视为传销被封是个肯定的事情了,不用多久,也就是说生命周期短的很可怜。 先不说,无限三级裂变,拉人头模...
  • flydycfly
  • flydycfly
  • 2016-05-25 15:52:11
  • 11152

多级分销系统(代理商佣金管理模块)设计概要(要求和数据库设计)

1. 数据库设计的原则 1) 准确记录账户基本信息,特别是状态。 2) 交易时要正确记录下交易信息和账户状态。 3) 交易记录是历史性的,不可篡改。 4) 交易是连续的,对时间...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2016-05-05 11:18:30
  • 6039

多级分销系统数据库模型(猜想)

需求:假设现在有一个九级分销商城项目,每个用户下面的九级下线买东西都可以给这个人带来分润收益。并且每一级的分润比例都不同,可能下面第一级分润比例是10%,第二级分润比例是5%,........。如何存...
  • su_sai
  • su_sai
  • 2016-09-01 01:22:17
  • 2318

java版微信三级分销系统完整源码(带mysql数据库)

  • 2016年03月29日 17:33
  • 24.72MB
  • 下载

wechat三级分销

1.精准 裂变  粘度 2.二维码  上下级之间的依赖关系(3级 表)  登录 支付 3. 安装laravel     composer create-project laravel/l...
  • silvercell
  • silvercell
  • 2016-05-18 11:56:45
  • 2535

三级分销系统

不知道什么时候,三级分销特别火。 已经有几个朋友和我讨论过这个问题。我正好在今年7月份做了一个三级分销系统。 这里写一下大概的流程,供大家参考。所谓三级分销,有两个核心的概念。 1.通过微信,微博,Q...
  • u013040887
  • u013040887
  • 2018-03-01 15:12:35
  • 183

微服务——通用分销系统设计

写在前面: 分销的应用非常广泛,对商业流动促进有着极大的推动力,所以大部分的平台都要做一套分销系统。具体什么是分销,建议大家先度娘普及。 设计目标: 业务目标: 1.系统角色:货主,各级分销商...
  • u013329334
  • u013329334
  • 2016-09-14 15:27:26
  • 1424

微信分销数据库完整代码

  • 2017年07月18日 15:55
  • 43.18MB
  • 下载

多级分销对接第三方API获取数据系统的优化

最近在做一个基于有赞的多级分销管理系统,所有成员的店面均在有赞商城,使用有赞API获得他们的业绩,但是有赞提供的分销只有一级,故制作该系统。考虑到减轻工作量,理清层次关系,采用了OOP设计方法,将数据...
  • InsZVA
  • InsZVA
  • 2015-07-23 13:02:01
  • 1628
    个人资料
    等级:
    访问量: 34万+
    积分: 3923
    排名: 1万+
    文章分类
    最新评论