mysql查询和匹配都是多个_Mysql连接查询匹配所有标签的多个“标签”(多对多关系)?...

我正在尝试查询与给定的一组标签匹配的对象。

基本上,我希望用户能够添加越来越多的标签,以过滤或“缩小”他们的搜索结果,类似于newegg.com。

我的表结构是一个对象表,一个标签表,以及一个MANY:MANY关系表ObjectsTags。所以我有一个JOIN查询像这样:

SELECT * FROM Objects

LEFT OUTER JOIN ObjectsTags ON (Objects.id=ObjectsTags.object_id)

LEFT OUTER JOIN Tags ON (Tags.id=ObjectsTags.tag_id)

我尝试使用IN子句/条件,如下所示:

SELECT * FROM Objects

LEFT OUTER JOIN ObjectsTags ON (Objects.id=ObjectsTags.object_id)

LEFT OUTER JOIN Tags ON (Tags.id=ObjectsTags.tag_id)

WHERE Tags.name IN ('tag1','tag2')

GROUP BY Objects.id

但是我了解到,这模拟了一系列的OR,所以你添加到查询的更多的标签更多的结果,而不是像我希望的结果集缩小。

我也尝试过多个类似的条件,并在一起:

SELECT * FROM Objects

LEFT OUTER JOIN ObjectsTags ON (Objects.id=ObjectsTags.object_id)

LEFT OUTER JOIN Tags ON (Tags.id=ObjectsTags.tag_id)

WHERE Tags.name LIKE 'tag1'

AND Tags.name LIKE 'tag2'

GROUP BY Objects.id

但是这不会返回结果,因为当结果分组在一起时,OUTER JOINed Tags.name列只包含’tag1’,而不是’tag2’。 “tag2”匹配的结果行​​由GROUPING“隐藏”。

如何匹配所有的标签,以获得我之后的“缩小”或“深入”效果?谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值