无法理解如何通过第二个表中的标签信息过滤图像表。
所以我有一个包含所有基本字段的图像表:
id |
title |
userid |
timestamp |
status
我有一个标签表:
id |
imageid |
text (contains a single tag)
我想做的很简单:获取标签列表并获取包含列表中所有标签的图像列表。我只是无法绕过它。
非常感谢任何帮助,谢谢!
SELECT
a.*
FROM
images a
INNER JOIN
tags b ON a.id = b.imageid
WHERE
b.text IN ('tag1', 'tag2', 'tag3')
GROUP BY
a.id
HAVING
COUNT(*) = 3
'tag1', 'tag2', 'tag3'
是您的输入标签列表子句3
中HAVING
的输入是标签列表中的标签计数。
假设您没有重复的标签 per imageid
,您可以加入一个查询,该查询计算每个 id 的标签,将带有IN()
子句的标签限制为您要搜索的列表。
然后使用一个HAVING
子句,拒绝计数不等于列表中标签数量的项目(那些少于完整列表的项目):
SELECT
images.*
FROM
images
JOIN (
SELECT
imageid,
COUNT(*) AS numtags
/* could also be COUNT(DISTINCT text) */
FROM tags
/* Put only the tags you want into an IN() clause */
WHERE text IN ('tag1,'tag2','tag3')
GROUP BY imageid
/* If an image has all 3 tags, COUNT(*) = 3 */
HAVING numtags = 3
) tlist ON images.id = tlist.imageid