2014-10-06 2 views
0

Это немного сложно объяснить, но здесь идет. У меня есть база данных книг, а в ней две таблицы.
MySQL: строки пересекающихся строк, которые соответствуют определенному числу характеристик

Один для уникальных книг ключевых слов, т.е. просто приписывая ID каждому ключевому слову:

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

и один для сопоставления идентификаторов книг для ключевого слова идентификаторов (то есть, все ключевые слова для каждой книги):

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

Таким образом, книга «b1» имеет ключевое слово «биография», а книга «b2» содержит ключевые слова «триллер» и «биография».

Мой вопрос: если у меня есть определенный идентификатор книги (скажем, «b2»), есть ли способ найти другие книги в базе данных, которые имеют не менее 2 (или любой другой номер), соответствующие ключевым словам с "b2"? Итак, в этом примере другие книги, которые также имеют «k1» и «k2» в качестве ключевых слов? Это будет способ найти «связанные книги».

Я приветствовал бы любую помощь. Пожалуйста, дайте мне знать, если вы хотите получить разъяснения относительно того, что я прошу!

+0

Я думаю, что может быть способ генерировать «совпадение» для каждого фильма, а затем сортировать фильмы в порядке убывания по результату матча (т. Е. Самый высокий балл по счёту «наиболее связан»). Я на правильном пути? – vinsanity555

ответ

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).

 Смежные вопросы

  • Нет связанных вопросов^_^