我有桌子:
我该如何查找具有两个或多个标签的图书,比如说tag_id(1、4、5)?并且应该可以使用LIMIT / OFFSET。
我唯一的想法是过滤books_tags是否包含任何标签,然后将它们聚集在数组中并过滤array.length <3(当前搜索的总标签)的行。但是我认为这不是一个合理的方法...
答案 0 :(得分:2)
您必须加入表格并按书分组。然后使用HAVING子句放置条件:
select
b.id
from books b inner join tags_books t
on t.book_id = b.id
where tag_id in (1,4,5)
group by b.id
having count(distinct tag_id) = 3
如果您不需要这些书具有全部3个标签,但其中的任何一个都可以,则删除HAVING子句。
如果您需要至少2个标签,请更改为:
having count(distinct tag_id) >= 2