2

我正在尝试使用以下 3 个表格使我的关键字搜索尽可能高效:

tblImageFiles [ID, ImageURL]

tblTags [ID,标签]

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...

派生表可以分离出来,但其语法取决于您使用的数据库。您还需要运行一个循环以确保您可以处理可变数量的搜索词,但这是基本思想。

于 2012-05-18T09:32:04.940 回答