[英]Related posts: Get records by tags from different tables
我正在新聞網站上工作。 像每個新聞站點一樣,會有新聞,專欄,視頻和照片畫廊。 我打算將這些不同類型的記錄保留在不同的表中,但將它們與標簽相關聯。 這是一個簡單的模式:
表格:新聞,視頻,圖庫,列,標簽,Post_to_tags
Post_to_tags:
-tagid
-postid
-posttype [新聞,視頻,畫廊,專欄]
現在,我需要做的是在單個查詢中獲取帖子的相關記錄。 加入一張桌子並獲得相關的帖子很容易,但是當涉及到不同的桌子時...有什么想法嗎?
您可能要在兩個查詢中執行此操作,因為在一個查詢中執行此操作會很丑陋,並且可能不會給您帶來很多好處。
因此,您將使用標記來獲取所有相關的postid,然后只需進行聯接即可獲取與postid相關的文章和相關記錄。
select n.*, g.*, v.* FROM News n
INNER JOIN Galleries g ON(g.postid=n.postid)
INNER JOIN Videos v ON(v.postid=n.postid)
WHERE n.postid IN(
(SELECT p.postid FROM Post_to_tags p WHERE ...)
)
這應該是一個起點,但是我看到了您的問題,因為您使用的是posttype。
為什么不忽略此查詢的posttype,而只對故事使用相同的postid,以便可以輕松地搜索它們。
如果查詢得到的字段數相同且數據類型相同,則可以使用UNION。
SELECT fielda, fieldb FROM news n
JOIN post_to_tags p ON (n.post_id=p.post_id)
where p.tag_id='x' and p.post_type='news'
UNION
SELECT fielda, fieldb FROM videos v
JOIN post_to_tags p ON (v.post_id=p.post_id)
where p.tag_id='x' and p.post_type='videos'
但是,在這種情況下,您可能需要重新考慮架構。 就像是:
將允許一個查詢:
SELECT fielda, fieldb FROM posts p
JOIN post_to_tags pt ON (p.post_id=pt.post_id)
where pt.tag_id='x';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.