我在下面创建一个查询,根据用户在搜索栏中输入的字词,它会检索数据。现在我要做的是不显示重复数据,所以如果有2行所有字段完全相同,那么它是一个重复行,所以它只显示一次这一行而不是多次。现在我认为这似乎是这样做的,因为我看到没有重复的行,但我所做的只是使用所有SELECT字段进行GROUP BY,除了Answer字段,因为它不允许我在GROUP BY子句中有一个组concat。
但我的问题是,我是否需要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"))."
答案 0 :(得分:1)
我认为DISTINCT
可能会更好/更简单:
SELECT
DISTINCT q.QuestionContent,
答案 1 :(得分:1)
不,您不需要group_concat()
中的select
。 group by
将确保group by
中的列的任何特定值组合都会出现一次。因为这些保证是不同的,所以您不必担心任何其他列。
group_concat()
是基于摘要的计算列。您不能在group by
语句中包含此类列。如果要再次聚合它们,则需要使用子查询。