抱歉,如果标题含糊不清。
我有这些表:
image : id , title
image_tags : image_id , tag
image_categories : image_id , category_id
在图片页面中,我想通过标签获得相似的图片,来自同一类别,但我想排除某些类别
所以这是我的问题:(假设我的治疗图片有category : 1 , tag : a,b
,我想忽略category : 6,7
)
SELECT image_tags.image_id
FROM image_tags
JOIN image_categories
ON image_categories.image_id = image_tags.image_id
WHERE image_tags.tag IN ( 'a', 'b' ) && image_categories.category_id IN ( 1 )
&&
image_categories.category_id NOT IN ( 6, 7 )
有效,但如果我有
image_tags ( image_id , tag ) :
`128` , `a`
--------------------------------------------
image_categories (image_id , category_id ) :
`128` , `1`
`128` , `6`
我会在id = 128
image_categories
的图片
如果第二行(128
)
category_i : 6
becuz
希望我的问题不是很混乱
答案 0 :(得分:2)
在image_id
上分组并使用HAVING
子句中合适的聚合函数测试类别:
SELECT image_id
FROM image_tags JOIN image_categories USING (image_id)
WHERE image_tags.tag IN ('a','b')
GROUP BY image_id
HAVING SUM(image_categories.category_id IN (1))
AND NOT SUM(image_categories.category_id IN (6,7))