2011-12-21 57 views
0

我想創建一個查詢它,爲簡單起見,搜索一組一組的博客文章和回報的相關標籤:MySQL的搜索和加入標籤的超

1)的博客文章與搜索查詢匹配的標籤 AND 2)與該博文相關聯的任何其他標籤,不一定與搜索詞匹配。

的博客文章被存儲在一個表:

table: entries 
id | entry 
------------- 
1 | entry 1 
2 | entry 2 
3 | entry 3 
... 

和標籤存儲在另一個表。

SELECT entries.entry, tags.tag FROM entries 
LEFT JOIN tags ON tags.entry_id = entries.id where tags.tag like '%tag%' 

這將返回:

entry  | tag 
-------------------- 
entry 1 | tag_1 
entry 2 | another_tag 

因此,查詢正確的搜索標籤,但我想拉任何其他標記

table: tags 
id | entry_id | tag 
--------------------------- 
1 | 1  | tag_1 
2 | 1  | another 
3 | 2  | another_tag 
4 | 3  | third_entry   
.... 

MySQL查詢的結構如下:與這兩個條目相關聯,因爲我將在搜索結果中顯示標籤的超集。任何指導表示讚賞。

+0

所以,你想從帖子有TAG_1所有標籤和another_tag? – AlfredoVR 2011-12-21 07:23:59

+0

對於作爲搜索結果一部分出現的任何條目,我現在想要爲這些條目提取所有標籤。 – 2011-12-21 07:26:53

+0

糾正我,如果我錯了,但你的數據庫設計是錯誤的。您必須使用entry_id tag_id創建表entry_tag以建立多對多關係的模型。你做到了嗎? – AlfredoVR 2011-12-21 07:29:23

回答

0

'選擇entries.entry,從條目tags.tag左連接上entries_tags.entry_id = entries.id entries_tags左連接上tags.id = entries_tags.tag_id標籤,其中tags.tag LIKE'%標籤%'

SELECT entries.entry from(選擇entries.entry,tags.tag from entries left join entries_tags on entries_tags.entry_id = entries.id left tags tag.id = entries_tags.tag_id其中tags.tag like'%tag%'' )自然連接entries_tags

嘗試。

+0

謝謝,這真的很有幫助。我實際上構建了一個基於此的工作查詢...查看新的答案帖子瞭解詳細信息。 – 2011-12-21 23:03:03

0

基於alfa64的指導下,我建了下面的查詢現在正確地拉搜索的標籤,並檢索任何額外的標籤爲每個相應的博客文章:

SELECT q1.id, q1.entry, q1.tag from (select entries.entry, tags.tag from entries 
LEFT JOIN entries_tags on entries_tags.entry_id = entries.id 
LEFT JOIN tags on tags.id = entries_tags.tag_id where tags.tag like '%tag%') as q1 
JOIN entries_tags as et1 on et1.entry_id = q1.id 
JOIN tags as t2 on t2.id = et1.tag_id 
GROUP BY t2.id