订阅(粉丝)功能的设计与实现

 废话少说,直接上主题:

  1.首先,数据库表的设计:

    mysql数据库,要实现这个功能,必须建立一张订阅表(subscribe表)。我设计的这张表的字段如下:

105731_6brC_2297997.png   

其中subscribe_id 自增,userA_id,userB_id分别是相应用户,subscribe_state表示订阅状态,最后一个字段是用来记录订阅时间。现在说说这个最关键的subscribe_state字段:

    我将它设定为三种状态,分别用1,2,3来区别:

    (a)1表示,A订阅B,A为B的粉丝

    (b)2表示,B订阅A,B为A的粉丝

    (c)3表示,A,B相互订阅,A,B互为粉丝。

这样设计的好处,我认为是将表结构简单化,这样可以便于数据库操作的时候进行简单查询。

    2.具体实现:

    例如,要实现这个功能,你必须实现两个操作,一是从数据库得到用户的订阅列表,二是从数据库获取用户的粉丝列表。在我看来,这两个操作其实是互补操作,只要你实现了其中一个,那么在实现第二个操作的时候,取补就行(如果在订阅列表中的subscribe_state=1,那么在粉丝列表的subcribe_state就=2,这个应该很容易理解)。

    我就以订阅为主来详细介绍具体实现:

    第一步,数据查询语句:

select * from subscribe where userA_id = ? or userB_id = ? order by create_time desc.

    将查询结果保存到泛型list中,new 一个User list —— ulist 用来保存当前用户订阅的用户信息,然后进行第二步操作:

for(int i = 0;i < list.size(); i++){
    if(list.get(i).get("userA_id").equals("user_id")){ //user_id 是当前用户ID
        if(list.get(i).get("subscribe_state").equals("1")||list.get(i).get("subscribe_state").equals("3")){    //1 或 3
        ulist.add(User.dao.findById(list.get(i).get("userB_id"))); //此时B为A的订阅用户,加入ulist
        }
    }else{ //userB_id 字段为当前user_id
        if(list.get(i).get("subscribe_state").equals("2")||list.get(i).get("subscribe_state").equals("3")){ //2 或 3
       ulist.add(User.dao.findById(list.get(i).get("userA_id"))); //此时A为B的订阅用户,加入ulist
        }
    }   
}
return ulist; // 这个list就是我们想要得到的当前用户ID为user_id的用户所有的订阅用户列表。

这样,就实现了订阅的功能了,粉丝就是这个的互补操作,大家可以稍微想一下就能够明白该怎么去做了。

好了,在这里,本人只是提供了一种自己能解决问题的自认为比较简单的方法。相信大家会有更加方便的方法,希望相互交流。

打完收工。


转载于:https://my.oschina.net/chrishellowoo/blog/416623

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值