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