2010-08-13 68 views
4

我真的很希望有人能幫我解決我的問題。我想通過group_concat實現與查詢的匹配。在條款中使用concat MATCH AGAINST - mysql

我需要的是這樣的:

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子句,但不起作用。

在那一刻我不知道如何解決這個問題。有人可以幫我解決這個問題嗎? 非常感謝。

+1

+1:表別名,連接..對於我通常在SO上看到的東西來說,這是一個令人欣慰的緩解 – 2010-08-13 16:28:43

回答

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

+0

我試過這個,但得到一個錯誤:「使用的表類型不支持FULLTEXT索引」。我的主表有一個FULLTEXT索引,在這種情況下,錯誤是關於x.grp_place(如果我將MATCH AGAINST替換爲LOCATE,它可以工作!)。任何想法如何解決這個問題? – patrick 2014-02-12 11:06:29