我嘗試使用以下3個表格,使我的關鍵字搜索儘可能高效:SQL多對多選擇帶有鏈接表
tblImageFiles [ID, IMAGEURL]
tblTags [ID,標籤]
tblxImagesTags [ID,圖像標識,標籤識別](這是一個linktable加入上述在多對多的關係)
任何人都可以幫助我一個存儲過程返回所有匹配所有搜索標籤匹配基於這種模式的圖像?
感謝
我嘗試使用以下3個表格,使我的關鍵字搜索儘可能高效:SQL多對多選擇帶有鏈接表
tblImageFiles [ID, IMAGEURL]
tblTags [ID,標籤]
tblxImagesTags [ID,圖像標識,標籤識別](這是一個linktable加入上述在多對多的關係)
任何人都可以幫助我一個存儲過程返回所有匹配所有搜索標籤匹配基於這種模式的圖像?
感謝
count(distinct aux.TagID)
中的數字必須等於where t.Tag in (tag1, tag2, tag3)
中的標籤數量。
select img.* from tblImageFiles img
inner join (
select it.ImageID from tblTags t
inner join tblxImagesTags it on it.TagID = t.ID
where t.Tag in (tag1, tag2, tag3)
group by it.ImageID
having count(distinct it.TagID) = 3
) aux on aux.ImageID = img.ID
SELECT tblImageFiles.ImageURL
FROM tblImageFiles
WHERE EXISTS (SELECT 1
FROM tblxImagesTags
INNER JOIN tblTags
ON tblTags.ID = tblxImagesTags.TagID
WHERE tblxImagesTags.ImgageID = tblImageFiles.ID
AND tblTags.Tag = <searchtag1>)
AND EXISTS (SELECT 1
FROM tblxImagesTags
INNER JOIN tblTags
ON tblTags.ID = tblxImagesTags.TagID
WHERE tblxImagesTags.ImgageID = tblImageFiles.ID
AND tblTags.Tag = <searchtag2>)
// etc...
派生表可以被分離出來,但是對於語法取決於你使用的是什麼DB。您還需要運行一個循環以確保您可以應對可變數量的搜索條件,但這是基本思路。
感謝,這看起來很接近,但返回匹配任何標籤的圖像,我需要它匹配所有這些標籤,如果可能的話,例如,搜索'門'應該產生比'紅色,門'更多的結果,因爲它應該過濾 – Mike
我的不好 - 誤解了這個問題。現在更新。 –
相似的問題(有很多方法可以做到這一點):[如何篩選具有多對一關係的SQL結果](http://stackoverflow.com/questions/7364969/how-to- filter-sql-results-in-a-many-through-relation) –