首页 > 代码库 > SQL自连接(源于推荐算法中的反查表问题)

SQL自连接(源于推荐算法中的反查表问题)

  ”基于用户的协同过滤算法“是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你。

  要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表

  先举个例子说明下反查表:甲喜欢的物品有:A、B、C;乙喜欢的物品有:B、E、F;丙喜欢的物品有:A、J、K;而你喜欢的物品是:A、J、M反查表就是喜欢A物品的有你、甲、丙,喜欢J物品的有你、丙,喜欢M物品的只有,这就是和你喜欢的物品有联系的用户。有了这个反查表,我们就可以看出和你有关系的用户只有甲和丙,乙用户和你没有任何的交集。于是,接下来我们只需要再计算甲、丙和你的相似性,找出和你最相邻的用户,通过这个用户来给你推荐物品。

  因此,我在实现基于用户的协同过滤算法的第一步的关键是:通过SQL自连接,能够反查到和你喜欢的物品有联系的用户。(自连接的定义By百度百科:自连接(self join)是SQL语句中经常要用到的连接方式,使用自连接可以将自身表的一个镜像当做另一个表来对待,从而能够得到一些特殊的数据。)

  我所建的评分信息表拥有的字段和数据(删减版)如下图所示:

1.评分信息表

其中,字段u_ID代表用户ID,f_ID代表视频ID,两者都是另外两张表的主键,score代表评分值。

  我所使用的自连接语句为(原语句放置于存储过程中):

SELECT DISTINCT B.u_ID 
FROM tb_interest A,tb_interest B 
WHERE A.f_ID = B.f_ID AND A.u_ID = 2 AND B.u_ID<>2;
View Code

  执行的结果截图如下:

图2.自连接语句执行结果

  由结果我们可以知道,和用户2有关联的用户为4、5,即用户2评分过的视频,用户4和用户5也评分过。这样,我们利用SQL自连接语句,通过一句简单的SQL语句,就能够反查到了所要的信息。