废话少说,直接上主题:
1.首先,数据库表的设计:
mysql数据库,要实现这个功能,必须建立一张订阅表(subscribe表)。我设计的这张表的字段如下:
其中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的用户所有的订阅用户列表。
这样,就实现了订阅的功能了,粉丝就是这个的互补操作,大家可以稍微想一下就能够明白该怎么去做了。
好了,在这里,本人只是提供了一种自己能解决问题的自认为比较简单的方法。相信大家会有更加方便的方法,希望相互交流。
打完收工。