我现在想为社区添加一个功能,就是好友推荐系统
根据某个用户的地区和性别 等自己的属性推荐特定的好友
我以前的做法是
比如登录用户为‘张三’男的 我要推荐相同地区的女的。
SQL语句:
select 地区 into @area,性别 into @sex from 用户表 where 姓名='张三'
select * from 用户表 where 地区=@area and 性别=相反@sex and 姓名 in(最近登录1w用户) limit 300
{最近登录的用户}
这个集合我每半个小时计算的最近登录的1w个用户,然后放到缓存。(这样做虽然不合适,但是如果将用户登录表和用户表join,速度很慢,)
如下。是我以前的做法,发现排序很慢
select * from 用户表 left join 登录表 on 用户表.姓名=登录表.姓名 where 地区=@area and 性别=相反的@sex order by 最近登陆日期 DESC limit 300;
得到的结果集合
还需要计算张三和她们之间的年龄差距计算排序( 根据权重排序 )
如 张三 和 王晓燕 的年龄差距为 1岁,权重为 50。
--------------分割线-----------------------------------------------------
我以前这样做每次一个用户发起请求都要执行SQL 和计算,觉得不太合适,所有该有的索引都有了。
我想用sphinx,但是我这个推荐本书就是依据字段属性来区分的,所以觉得也有点不合适,
在这里想问问有什么成熟的方案没有 。