[英]sql query for posts with specific tags
我有帖子,標簽,post_tags表。
現在,我想獲取所有具有(a,b,d)標簽的帖子,
我該如何做到這一點,而不僅僅是獲得帶有一個/兩個/所有標簽的所有帖子?
tables:
posts:
id, title
tags:
id, title
post_tags:
post_id, tag_id
我的簡單想法是此查詢:
select *
from post_tags pt
join posts ps on pt.post_id=ps.id
where pt.tag_id in (MY_DESIRED_TAGS)
這肯定行不通,因為我只收到其中一個標簽而不是全部標簽的帖子。
您可以使用group by
並having
:
select p.*
from posts p join
post_tags pt
on pt.post_id = p.id
where pt.tag_id in (MY_DESIRED_TAGS)
group by p.post_id
having count(*) = <# desired tags>;
關鍵是計算匹配標簽的數量。 如果您有三個標簽,那么having
子句將是:
having count(*) = 3
SELECT *
FROM posts ps
WHERE ps.id IN (
SELECT pt.post_id
FROM post_tags pt
WHERE pt.tag_id IN ([MY_DESIRED_TAGS])
GROUP BY pt.post_id
HAVING COUNT(1) = [THE_NUMBER_OF_DESIRED_TAGS]
)
;
子查詢查找每個帖子的標簽數量(在提供的標簽中),並提供帖子ID值作為結果集。 然后,外部查詢將查找具有這些id值的帖子。 可以像其他答案所示的那樣,通過JOIN來完成,但是我建議的方法可能會更快,因為服務器不必處理與實際組操作無關的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.