要用户注册的时候选择各种爱好,比如:运动,上网,游戏,旅游等,那么我想要实现的是,该注册用户与其他已经注册的用户进行爱好上的对比(如果两者都选择运动,则对比度就上升,也就是说只要对上一个,对比度就上升),然后按对比度对已经注册的用户进行排序。请问数据库该怎么设计 并且对比的sql语句怎么写感觉没什么思路啊 求各位大神指点
解决方案 »
- 求一个数据转换的查询语句
- 我的三台门店服务器同时坏掉了,大家帮我想想这会有哪几方面的原因造成!
- WIN2003server是不是对MSSQL2000支持不好
- 急等着!急急急!
- Sql2000 遍历树生成封闭字符串问题请教
- 存储过程里是否可以用动态的Sql语句?
- 求高人帮忙,我的网站被挂马。mssql数据库资料都被删除了,都被加上了<script src=http://8889.ss.la></script>这句话
- sql server 中 如何在 1毫秒内 得到不同 随机数 ?
- 在一个引号当中的sql语句中,包含有单引号,怎样表示这样的一个单引号 ' ?
- JDBC中procedure返回参数如何获得?
- MSSQL 主键字段设计
- 新手小白求指教
设计两张表;一张用户信息表(用户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
个人意见:
设计两张表;一张用户信息表(用户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