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)

having 句も使用しようとしましたが、機能しません。

現時点では、これを解決する方法がわかりません。誰かがこの問題を手伝ってくれますか? どうもありがとう。

4

1 に答える 1

3

You won't be able to use GROUP_CONCAT in a WHERE clause - aggregate functions can only be used in the HAVING clause. But you could use a derived table/inline view to get that GROUP_CONCAT output, like this:

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 allows "hidden" columns in the GROUP BY: http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

于 2010-08-13T16:34:53.937 に答える