4

我真的希望有人可以帮助我解决我的问题。我想用 group_concat 实现与查询的匹配。

我需要这样的东西:

Select c.id, p.place 
  from content c 
  join place p on p.object_id = c.id 
 where match(group_concat(p.place)) AGAINST('"string1" "string2" "string3"', IN BOOLEAN MODE)  
   and not match (group_concat(p.place)) AGAINST('string4', IN BOOLEAN MODE)

我尝试使用也有子句但不起作用。

目前我不知道如何解决这个问题。有人可以帮我解决这个问题吗?非常感谢。

4

1 回答 1

3

您将无法GROUP_CONCAT在 WHERE 子句中使用 - 聚合函数只能在HAVING子句中使用。但是您可以使用派生表/内联视图来获取 GROUP_CONCAT 输出,如下所示:

SELECT c.id, 
       x.place 
  FROM CONTENT c 
  JOIN (SELECT p.object_id,
               p.place,
               GROUP_CONCAT(p.place) AS grp_place
          FROM PLACE p
      GROUP BY p.object_id) x ON x.object_id = c.id
 WHERE MATCH(x.grp_place) AGAINST('"string1" "string2" "string3"', IN BOOLEAN MODE)  
   AND NOT MATCH(x.grp_place AGAINST('string4', IN BOOLEAN MODE)

MySQL 允许 GROUP BY 中的“隐藏”列:http: //dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

于 2010-08-13T16:34:53.937 回答