2

我正在下面创建一个查询,它根据用户在搜索栏中输入的术语检索数据。现在我要做的是不显示重复数据,所以如果有 2 行所有字段都完全相同,那么它就是重复行,所以它只显示一次而不是多次。现在我认为它似乎这样做了,因为我没有看到重复的行,但我所做的只是对除 Answer 字段之外的所有 SELECT 字段进行 GROUP BY,因为它不允许我在 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"))."
4

2 回答 2

1

我认为DISTINCT可能会更好/更简单:

SELECT
  DISTINCT q.QuestionContent, 
于 2013-02-05T18:59:43.607 回答
1

不,您不需要group_concat(). selectgroup by将确保任何特定的值组合将在group by. 因为这些保证是不同的,所以您不必担心任何其他列。

group_concat()是一个基于摘要的计算列。您不得在group by语句中包含此类列。如果要再次聚合它们,则需要使用子查询。

于 2013-02-05T19:02:00.193 回答