我有一個將圖像與標籤匹配的Web應用程序,我需要創建一種動態優化標籤搜索結果的方式。但是,我無法找到一個乾淨的方式來進行SQL查詢,而這正是我需要您的幫助的地方。SQL n對n匹配多個值
這個想法是,如果我搜索標籤「乾淨」和「狗」,我將有圖像結果,同時具有標籤「乾淨」和「狗」。如果我還包含「小」標籤,我的結果將不得不縮小到具有三個標籤關聯的圖像。
因此,有一個N對N的關係,這是做到這一點的正確方法?
我自然的方法是生成代碼這樣的事情,但我肯定不喜歡往哪裏去:
SELECT images.*
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tags.tag = @tag1
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag2
AND EXISTS
(
SELECT 1
FROM images
INNER JOIN image_tags ON ...
INNER JOIN tags ON ...
WHERE tag = @tag3
AND EXISTS (...)
...
)
)
當然,這不是真的很好。任何想法?
謝謝!
這對於允許/需要的標籤數量非常嚴格,並且對每個指定的標籤而不是每個圖像都返回一行。 – 2010-01-04 17:02:05
'GROUP BY'應該避免爲每個標籤返回一行。我編輯了這個問題,以顯示它如何與動態數量的標籤一起工作。 – 2010-01-04 17:17:45
非常感謝!我沒有想過用HAVING COUNT()重新檢查結果。 – Alpha 2010-01-05 14:11:56