2

次の3つの表を使用して、キーワード検索をできるだけ効率的にしようとしています。

tblImageFiles [ID、ImageURL]

tblTags [ID、Tag]

tblxImagesTags [ID、ImageID、TagID](これは、多対多の関係で上記を結合するリンクテーブルです)

このスキーマに基づいて入力されたすべての検索タグに一致するすべての画像を返すストアドプロシージャを誰かが手伝ってくれますか?

ありがとう

4

2 に答える 2

2

の数は、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
于 2012-05-18T09:33:06.247 に答える
1
        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 によって異なります。また、可変数の検索語に対応できるようにループを実行する必要がありますが、これが基本的な考え方です。

于 2012-05-18T09:32:04.940 に答える