2014-10-06 48 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)