使用concat in子句MATCH AGAINST - mysql

时间:2010-08-13 16:10:13

标签: sql mysql mysql-error-1064

我真的希望有人能帮我解决问题。我想通过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)

我试图使用也有条款但不起作用。

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

1 个答案:

答案 0 :(得分:3)

您将无法在WHERE子句中使用GROUP_CONCAT - 聚合函数只能在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