我有3個表:什麼是查詢以獲得「相關標籤」像堆棧溢出
links (id, linkName)
tags (id, tagName)
tagsBridge (tagID, linkID)
我試圖支持顯示像SOF相關的標籤。所以如果你點擊標籤「XYZ」,現在我顯示了標籤「XYZ」的所有鏈接,但是我也想顯示所有其他標籤的人名已標記的項目的標籤「XYZ」
什麼是查詢該
我有3個表:什麼是查詢以獲得「相關標籤」像堆棧溢出
links (id, linkName)
tags (id, tagName)
tagsBridge (tagID, linkID)
我試圖支持顯示像SOF相關的標籤。所以如果你點擊標籤「XYZ」,現在我顯示了標籤「XYZ」的所有鏈接,但是我也想顯示所有其他標籤的人名已標記的項目的標籤「XYZ」
什麼是查詢該
嘗試:
SELECT t.tagname
FROM TAGS t
JOIN TAGS_BRIDGE tb ON tb.tagid = t.id
JOIN (SELECT li.id
FROM LINKS li
JOIN TAGS_BRIDGE tb ON tb.linkid = li.id
JOIN TAGS t ON t.id = tb.tagid
WHERE t.tagname = 'XYZ') x ON x.id = tb.linkid
GROUP BY t.tagname
rexem。還有一個問題,如果我選擇了多個標籤,該怎麼辦?所以我想看看相關的標籤,我已經過濾了tagName =「XYZ」和tagname =「ABC」? – leora 2009-10-31 13:19:29
一個非常醜陋的嵌套查詢的最快方法
SELECT DISTINCT tagName FROM tags WHERE id in
(
SELECT tagID FROM tagsBridge WHERE linkID IN
(
SELECT linkID FROM tagsBridge WHERE tagID IN
(
SELECT id FROM tags WHERE tagName like 'XYZ'
)
)
)
編輯:現在這基本上是隻是用不同的方式寫Ki我認爲是Broadhurst的。我想有些DB可能會在幕後做不同的處理,但我認爲幾乎所有的現代引擎都會以其中兩個具有相同的查詢計劃結束。
select distinct t.tagName
from tags t
join tagsBridge tb on (t.id = tb.tagID)
join tagsBridge tbt on (tb.linkID = tbt.linkID)
join tags ta on (ta.id = tbt.tagID)
where ta.tagname = 'XYZ'
「IN」子句中的「DISTINCT」不是必需的 - 標記名是唯一需要唯一的東西。 – 2009-10-30 15:44:05
這可能是一個重複的問題。我還沒有完全聲明這一點,但通過搜索與「stackoverflow標籤相關」的關鍵字,你會發現很多現有技術。 – mjv 2009-10-30 05:54:23