2009-10-21 32 views
0

我正在新聞網站上工作。像每個新聞網站都會有新聞,專欄,視頻和照片畫廊。我打算將這些不同類型的記錄保存在不同的表格中,但將它們與標籤相關聯。下面是一個簡單的模式:相關文章:通過不同表中的標籤獲取記錄

表:新聞,視頻,畫廊,列,標籤,Post_to_tags

Post_to_tags:
- 標籤識別
-
帖子ID - posttype [新聞,視頻,畫廊,列]

現在我需要做的是在單個查詢中獲取相關記錄。很容易加入一張桌子並獲得相關帖子,但是當涉及到不同的桌子時......任何想法?

+0

你能否提供更多的細節?目前尚不清楚你要求什麼。 – 2009-10-21 14:50:32

+0

你能解釋一下你準備選擇什麼嗎? – Granit 2009-10-21 14:51:56

+0

我需要從不同的表中獲取每個相關記錄。正如我所說加入一張桌子很容易,但我必須根據posttype加入不同的表格。 – redrain 2009-10-21 15:08:59

回答

1

你可能想要在兩個查詢中完成它,因爲在一個查詢中這樣做會非常難看,並且在速度方面可能不會給你帶來太多的收益。

因此,您將使用標籤獲取所有關聯的postids,然後只需進行連接即可獲取與postids相關的文章和關聯記錄。

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,因此它們有一種方法可以輕鬆搜索。

0

如果您的查詢使用相同的數據類型獲取相同數量的字段,則可以使用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' 

但是,如果是這種情況,您可能需要重新考慮您的模式。喜歡的東西:

  • 後表適用於所有 文章類型的字段,併爲後 類型的標誌字段
  • Details_X表具體 鍵入X帖子

將允許領域單個查詢:

SELECT fielda, fieldb FROM posts p 
    JOIN post_to_tags pt ON (p.post_id=pt.post_id) 
    where pt.tag_id='x'; 
+0

感謝您提供有關表格架構的建議。我也在想。我也在考慮在post_to_tags表中存儲post_link和post_title。所以我不需要使用連接。但每種方式都有它自己的問題。性能將非常重要。所以我正在尋找「最便宜」的解決方案。 – redrain 2009-10-21 15:16:53

相關問題