我正在尝试使用以下3个表格尽可能高效地进行关键字搜索:
tblImageFiles [ID, IMAGEURL]
tblTags [ID,标签]
tblxImagesTags [ID,ImageID,TagID](这是一个以多对多关系加入上述内容的链接表)
任何人都可以帮助我使用存储过程返回所有与基于此模式输入的所有搜索标签相匹配的图像吗?
由于
答案 0 :(得分: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
答案 1 :(得分: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...
派生表可以分离出来,但其语法取决于您使用的是什么数据库。您还需要运行一个循环以确保您可以处理可变数量的搜索项,但这是基本的想法。