跨越多行的结果的mysql逻辑

时间:2011-09-19 10:14:04

标签: mysql search

我有一个产品搜索查询,它返回与此类似的行:

| 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;

1 个答案:

答案 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 |
+----+------+--------------+-----+