要用户注册的时候选择各种爱好,比如:运动,上网,游戏,旅游等,那么我想要实现的是,该注册用户与其他已经注册的用户进行爱好上的对比(如果两者都选择运动,则对比度就上升,也就是说只要对上一个,对比度就上升),然后按对比度对已经注册的用户进行排序。请问数据库该怎么设计  并且对比的sql语句怎么写感觉没什么思路啊  求各位大神指点

解决方案 »

  1.   

    个人意见:
    设计两张表;一张用户信息表(用户ID,姓名,性别...),一张用户爱好表(用户ID,爱好)举个例子create table 用户爱好表
    (用户ID nvarchar(20),爱好 nvarchar(20))insert into 用户爱好表
    select '以注册用户1','爬山' union all
    select '以注册用户1','游泳' union all
    select '以注册用户1','读书' union all
    select '以注册用户1','音乐' union all
    select '以注册用户2','音乐' union all
    select '以注册用户2','游泳' union all
    select '以注册用户2','看电影' union all
    select '以注册用户3','爬山' union all 
    select '注册用户','爬山' union all
    select '注册用户','游泳' union all
    select '注册用户','读书' union all
    select '注册用户','音乐' 
    SELECT 用户ID,
           COUNT(爱好) AS 对比度
    FROM   (
               SELECT t2.用户ID,
                      t2.爱好
               FROM   (
                          SELECT *
                          FROM   用户爱好表
                          WHERE  用户ID = '注册用户'
                      ) t1
                      INNER JOIN (
                               SELECT *
                               FROM   用户爱好表
                               WHERE  用户ID != '注册用户'
                           ) t2
                           ON  t1.爱好 = t2.爱好
           ) sub
    GROUP BY
           用户ID
    ORDER BY
           对比度 desc
      

  2.   


    个人意见:
    设计两张表;一张用户信息表(用户ID,姓名,性别...),一张用户爱好表(用户ID,爱好)举个例子create table 用户爱好表
    (用户ID nvarchar(20),爱好 nvarchar(20))insert into 用户爱好表
    select '以注册用户1','爬山' union all
    select '以注册用户1','游泳' union all
    select '以注册用户1','读书' union all
    select '以注册用户1','音乐' union all
    select '以注册用户2','音乐' union all
    select '以注册用户2','游泳' union all
    select '以注册用户2','看电影' union all
    select '以注册用户3','爬山' union all 
    select '注册用户','爬山' union all
    select '注册用户','游泳' union all
    select '注册用户','读书' union all
    select '注册用户','音乐' 
    SELECT 用户ID,
           COUNT(爱好) AS 对比度
    FROM   (
               SELECT t2.用户ID,
                      t2.爱好
               FROM   (
                          SELECT *
                          FROM   用户爱好表
                          WHERE  用户ID = '注册用户'
                      ) t1
                      INNER JOIN (
                               SELECT *
                               FROM   用户爱好表
                               WHERE  用户ID != '注册用户'
                           ) t2
                           ON  t1.爱好 = t2.爱好
           ) sub
    GROUP BY
           用户ID
    ORDER BY
           对比度 desc