2013-05-09 2 views
0

Предположим, что у вас есть таблица базы данных, которая работает как ссылка между двумя другими. В этом случае связь между книгой и тегом, например, «вымысел» или «садоводство». Если мы имеем следующий набор данных:MySQL Query: Фильтрация результатов поиска по тегам

Book_id | tag_id 
---------------- 
1  | 13 
1  | 43 
1  | 15 
2  | 13 
2  | 25 

Какой запрос вы бы работать, чтобы сказать «только найти книги, которые имеют ссылки с тегами 13, 43 и 15»? То есть, чем больше тегов вы добавляете, тем меньше количество отображаемых книг.

Надеюсь, это имеет смысл. Спасибо заранее за ваше время и помощь!

ответ

1

Попробуйте это

SELECT 
    Book_id 
FROM 
    book_tags 
GROUP BY 
    Book_id 
HAVING 
    SUM(CASE WHEN tag_id IN (13, 43, 15) THEN 1 END) >= 3 

Вам нужны только книги с тегами 13, 43, 15 (все они), он возвращает book_id = 1 для вашего результата. SUM() >= 3 определяет общее количество тегов, которые вы ищете, в этом случае его 3, т.е. 13, 43, 15

SQLFIDDLE

+0

Это работало красиво! Благодаря тонну! – JamieHoward

+0

Рад, что это помогло :) – Akash

0

Если я правильно понимаю ваш вопрос ... Как это:

SELECT `Book_id` FROM `table` WHERE `tag_id` IN (13,43,25) LIMIT 0, 10; 
0

вы можете попробовать что-то вроде этого:

select book_table.* from book_table, link_table where book_table.id = link_table.book_id and link_table.tag_id in (13, 43, 15) 

Если у вас есть отдельный столик для ваших книг ..

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