我的网站类似豆瓣(就是注册用户可以对一本书根据自己读没读过对它进行标记,可以选择想读,在读与读过)。现在我想实现一个功能,对于一个注册用户,能帮他找出所有与他读的书互补的人(即A想读1书和3书,读过2书;B想读2书和4书,读过1书和5书。则A和B便是因为1、2书互补的人)以方便他们交换书籍。用来存储用户对书的标记的数据库是这样设计的:
id
user_id //用户的id
book_id //书籍的id
relation //用户和书籍的关系(1:想读,2:在读,3:读过)考虑到每个用户会有很多想读的与读过的书,请问大家怎么才能快速地实现这一功能呢?谢谢大家~
id
user_id //用户的id
book_id //书籍的id
relation //用户和书籍的关系(1:想读,2:在读,3:读过)考虑到每个用户会有很多想读的与读过的书,请问大家怎么才能快速地实现这一功能呢?谢谢大家~
user_id book_id relation
A 1 1
A 3 1
A 2 3
B 2 1
B 4 1
B 1 3
B 5 3先找到登录用户(假设是A)想读和读过的书籍的list
select a.user_id as 和你互补的读者, a.book_id as 他/她读过的书, b.book_id as 他/她想读的书
from tbl_user_book a, tbl_user_book b
where a.user_id = b.user_id
and a.book_id in (...) //括号中的list就是A想读的书籍
and a.relation = 3
and b.book_id in (...) //括号中的list就是A读过的书籍
and b.relation = 1
设置索引 (user_id,relation)但这个SQL语句显示并不理想。建议你可以给出一个表结构和想要的结果。这样别人可以直接看看有没有更好的SQL语句。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。