次の3つの表を使用して、キーワード検索をできるだけ効率的にしようとしています。
tblImageFiles [ID、ImageURL]
tblTags [ID、Tag]
tblxImagesTags [ID、ImageID、TagID](これは、多対多の関係で上記を結合するリンクテーブルです)
このスキーマに基づいて入力されたすべての検索タグに一致するすべての画像を返すストアドプロシージャを誰かが手伝ってくれますか?
ありがとう
次の3つの表を使用して、キーワード検索をできるだけ効率的にしようとしています。
tblImageFiles [ID、ImageURL]
tblTags [ID、Tag]
tblxImagesTags [ID、ImageID、TagID](これは、多対多の関係で上記を結合するリンクテーブルです)
このスキーマに基づいて入力されたすべての検索タグに一致するすべての画像を返すストアドプロシージャを誰かが手伝ってくれますか?
ありがとう
の数は、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 によって異なります。また、可変数の検索語に対応できるようにループを実行する必要がありますが、これが基本的な考え方です。