簡體   English   中英

sql查詢帶有特定標簽的帖子

[英]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 byhaving

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM