Php 如果在联接查询中没有B值,则获取具有值的项(重复项)
如果标题不清楚,很抱歉 我有这些桌子:Php 如果在联接查询中没有B值,则获取具有值的项(重复项),php,mysql,sql,normalization,Php,Mysql,Sql,Normalization,如果标题不清楚,很抱歉 我有这些桌子: image : id , title image_tags : image_id , tag image_categories : image_id , category_id 在图像页面中,我希望通过标签从同一类别中获得类似的图像,但我希望排除某些类别 下面是我的问题:(假设我的curernt图像有类别:1,标签:a,b,我想忽略类别:6,7) 这很有效,但如果我有 image_tags ( image_id , tag ) :
image : id , title
image_tags : image_id , tag
image_categories : image_id , category_id
在图像页面中,我希望通过标签从同一类别中获得类似的图像,但我希望排除某些类别
下面是我的问题:(假设我的curernt图像有类别:1,标签:a,b
,我想忽略类别:6,7
)
这很有效,但如果我有
image_tags ( image_id , tag ) :
`128` , `a`
--------------------------------------------
image_categories (image_id , category_id ) :
`128` , `1`
`128` , `6`
由于image\u类别中的第一行,我将获得id=128的图像
我必须以某种方式检查并忽略图像128
becuz if第二行(category_i:6
)
希望我的问题不会太混乱将image\u id
分组,并在HAVING
子句中使用合适的聚合函数测试类别:
选择图像\u id
从图像\标记使用(图像\ id)连接图像\类别
其中image_tags.tag位于('a','b')中
按图像分组\u id
具有总和(第(1)项中的image_categories.category_id)
和不求和(在(6,7)中的image_categories.category_id)
我想sum
是用来增加价值的(我得说,我从来没有见过像这样使用它)@max:是的。然而,MySQL没有真正的布尔值-它使用1
表示true,使用0
表示false。因此,如果表达式对于整个组为假,则将这些表达式的总和取在一组上将产生0
;如果组中的任何记录为真,则为非零。@max:在其他RDBMS中,必须更加明确-例如SUM(当(1)中的image\u categories.category\u id然后是1 ELSE 0 END时的情况)>0
@maxSUM
或max
可用于表示“any”,而MIN
可用于表示“none”。thanx,如果我只想排除6,7类(获取除这两个之外的所有类),该怎么办?如果我删除带有SUM的(第(1)项中的image\u categories.category\u id))
image_tags ( image_id , tag ) :
`128` , `a`
--------------------------------------------
image_categories (image_id , category_id ) :
`128` , `1`
`128` , `6`