2011-07-17 90 views
0

返回數據我有一個表的結構是這樣的(這是一個巨大的簡化):搜索文本/標籤,並從其他

Posts 
    UID 
    Title 
    Text ID (linked to Text.UID) 

Tags 
    UID 
    Tag Name 
    Tag Description 

Tag Associations 
    UID 
    Post UID (linked to Posts.UID) 
    Tag UID (linked to Tags.UID) 

Text 
    UID 
    Text 

我想知道兩件事:

A)如何查詢從Posts表中返回所有信息(包括Text表中的文本),對於與特定標籤關聯的所有「Posts」(用明文搜索),沒有重複,當一個職位可能包含多達20個標籤?

例如,標籤可能是「PHP」,我想要返回與它們關聯的「PHP」標籤的所有帖子。 B)另外,我想包含與每個帖子關聯的所有標籤名稱,但我不確定這是否可以在一個查詢中完成。

我使用的是準備好的語句,並且在搜索時一次顯示多個完整的帖子及其所有標籤,並且不必運行單獨的查詢來返回帖子及其所有標籤。

回答

0
SELECT 
    Posts.Title AS Title, 
    Text.Text AS Text, 
    (
    SELECT Tags.* 
    FROM Tags 
    INNER JOIN TagAssociations ON Tags.UID = TagAssociations.TagUID 
    WHERE TagAssociations.PostUID = Posts.UID 
) AS Tags 
FROM Posts 
INNER JOIN Text ON Posts.UID = Text.UID 
INNER JOIN TagAssociations ON Posts.UID = TagAssociations.PostUID 
INNER JOIN Tags ON Tags.UID = TagAssociations.TagUID 
WHERE Tags.TagName = 'search' 

我不認爲子查詢會工作,但你可以試試看。