2013-02-05 42 views
2

我在下面創建一個查詢,它根據用戶在搜索欄中輸入的術語檢索數據。現在我試圖做的不是顯示重複的數據,所以如果有兩行所有字段完全相同,那麼它是一個重複行,所以它只顯示一次而不是多次。現在我認爲它似乎這樣做,因爲我沒有看到重複的行,但我所做的只是做一個GROUP BY與所有的SELECT字段,除了Answer字段,因爲它不讓我在GROUP BY子句中有一個組concat。我是否需要GROUP BY中的此字段不顯示重複行

但是我的問題是,我需要GROUP Y子句中的該字段不顯示重複的行還是不是真的需要?

SELECT 
     q.QuestionContent, 
     o.OptionType, 
     q.NoofAnswers, 
     GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR ',') AS Answer, 
     r.ReplyType, 
     q.QuestionMarks 
    FROM Question q 
    LEFT JOIN Answer an 
     ON q.QuestionId = an.QuestionId 
    LEFT JOIN Reply r 
     ON q.ReplyId = r.ReplyId 
    LEFT JOIN Option_Table o 
     ON q.OptionId = o.OptionId 
    WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))." 
    GROUP BY q.QuestionContent, 
     o.OptionType, 
     q.NoofAnswers, 
     r.ReplyType, 
     q.QuestionMarks 
    ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))." 

回答

1

不,你不需要在selectgroup_concat()group by將確保group by中列的任何特定值組合都會出現一次。因爲這些保證是不同的,所以您不必擔心任何其他列。

group_concat()是基於總結的計算列。您不得在group by聲明中擁有此類列。如果你想再聚合一次,那麼你需要使用子查詢。

+0

所以你說的是在SELECT中的group_concat,而不是在Group By或其他方式中包含該字段,不要在選擇字段中包含組concat以供回答,但是在組中包括答案?所以,如果這是正確的,那麼我的查詢是否正確,而不是顯示重複結果呢? – user1914374

+0

@ user1914374。 。 。你不能在'group by'子句中使用'min()','max()','avg()'和'group_concat()'等函數。如果你想按他們分組,你需要一個子查詢。所以,是的,你的查詢很好。 –

+0

非常感謝:) – user1914374

1

我想DISTINCT可能效果更好/更簡單:

SELECT 
    DISTINCT q.QuestionContent, 
+0

這是非常不正確的答案。由於'group_concat()'函數的調用,查詢顯然是在進行聚合。 –