一个好友推荐的简单实现

 
CREATE   TABLE  t1
(
c1 
NUMBER ,
c2 
VARCHAR2 ( 10 )
);

INSERT   INTO  t1 (C1, C2)  VALUES  (  1 ' a ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  1 ' b ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  1 ' c ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  1 ' d ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  2 ' a ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  2 ' b ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  2 ' c ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  2 ' e ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  3 ' a ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  3 ' b ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  3 ' e ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  4 ' a ' );
INSERT   INTO  t1 (C1, C2)  VALUES  (  4 ' e ' );

COMMIT ;

 C1代表用户id,C2是该用户所访问的文章标题,C1=1的用户访问了a b c d四篇文章,现在要查出访问文章和用户1重叠数超过3(包含3)的用户id,C1=2的用户访问了a b c e四篇文章,两个都访问了a b c,重叠数是3,则相对于1号用户来说2号用户是符合要求的,其实用一句话说,就是:对每个用户查找与之有相同偏好的用户,相同偏好的定义为访问文章重叠数>=a。

SELECT    c1
    
FROM  t1
   
WHERE  c2  IN  ( SELECT  c2
                  
FROM  t1
                 
WHERE  c1  =   1 AND  c1  !=   1
GROUP   BY  c1
  
HAVING   COUNT  ( 1 >   3 ;

发表于 @ 2007年07月31日 09:48:00|评论(0 )|编辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值