我有一个产品搜索查询,它返回与此类似的行:
| id | name | search tag |
| 1 | cat | furry |
| 1 | cat | ginger |
| 2 | dog | furry |
我需要做的是能够获得与多个搜索标记匹配的单行 - 对于此示例,搜索furry AND
ginger不返回任何行,因为每行只有一个搜索标记(这是因为要获得这些结果我使用INNER JOIN
)。
我的问题是,我需要做些什么才能在查询中测试furry AND ginger
并返回猫而不是狗?
我在PHP中这样做。
更新
为了应对放入重复标记的用户,对HAVING
条件的简单修复将返回具有重复标记的行而不是忽略它们:
mysql> select id, name, group_concat(tag) as tags,
count(tag) as cnt from animals where tag in ('furry', 'ginger')
group by id HAVING cnt>=2;
答案 0 :(得分:4)
您可以先选择具有所需标记的行,然后按动物ID对它们进行分组。计算每只动物获得的结果数量,以及它是否与您想要的标记数相同。
mysql> select id, name, group_concat(tag) as tags,
count(tag) as cnt from animals where tag in ('furry', 'ginger')
group by id HAVING cnt=2;
+----+------+--------------+-----+
| id | name | tags | cnt |
+----+------+--------------+-----+
| 1 | cat | furry,ginger | 2 |
+----+------+--------------+-----+