2014-10-06 31 views
0

这有点难以解释,但在这里。我有一个书籍数据库,里面有两张表。
MySQL:与特定数量的特征相交的行相交

一个独特的书的关键字,即只归于一个ID给每个关键字:

id | keyword 
______|____________ 
k1 | drama 
k2 | thriller 
k3 | biography 

而且一个匹配书籍ID,以关键词ID(即全部为每本书的关键字):

 
book_id | keyword_id 
__________|_____________ 
b1  | k3 
b2  | k1 
b2  | k2 

所以基本上,书“b1”有关键词“传记”,书“b2”有关键词“惊悚片”和“传记”。

我的问题是:如果我有某个书籍ID(比如说“b2”),有没有办法让我在数据库中找到至少有至少 2(或任何其他数字)匹配关键字的其他书籍用“b2”?那么在这个例子中,其他的书也有“k1”和“k2”作为关键词吗?这将是一种找到“相关书籍”的方法。

我会很乐意提供任何帮助。请让我知道,如果你想澄清我的问题!

+0

我认为可能有一种方法可以为每部电影生成“匹配分数”,然后按照匹配分数以降序对电影进行排序(即最高匹配分数是“最相关的”)。我在正确的道路上吗? – vinsanity555 2014-10-06 01:19:57

回答

2

是的。事实上,你只需要第二张桌子。

select bk.book_id, count(*) 
from BookKeywords bk join 
    BookKeywords bkb2 
    on bkb2.book_id = 'b2' and 
     bk.keyword_id = bkb2.keyword_id 
group by bk.book_id 
having count(*) >= 2; 

如果您想要匹配关键字列表,您可以添加group_concat(bk.keyword_id)