以下に質問があります:
$questionquery = "
SELECT DISTINCT q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, r.ReplyType,
q.QuestionMarks, q.SessionId
FROM Answer an
INNER JOIN Question q ON q.QuestionId = an.QuestionId and an.SessionId = q.SessionId
JOIN Reply r ON q.ReplyId = r.ReplyId
JOIN Option_Table o ON q.OptionId = o.OptionId
WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))."
GROUP BY an.SessionId, an.QuestionId
ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))."
";
以下は、各データベーステーブルの外観です。
セッションテーブル:
SessionId SessionName
1 AAA
2 AAB
3 AAC
質問表:
SessionId QuestionId QuestionContent ReplyId OptionId
1 1 Here is a single answer 2 1
2 3 Here is a single answer 2 1
3 3 Here is a single answer 2 1
回答表:
AnswerId SessionId QuestionId Answer
1 1 1 True
2 2 3 True
3 3 3 True
返信表:
ReplyId ReplyType
1 Single
2 Multiple
オプションテーブル:
OptionId OptionType
1 True or False
今私が得ている問題は、データベースに3つの質問があり、それらはまったく同じで、同じ答え、同じマーク、同じオプションタイプなど、すべて同じで問題ないということです。しかし、クエリで私がやりたいのは、列がすべて一致する複数の行がある場合、それを1回だけ表示することです。したがって、現時点では、これをクエリ出力として以下に表示しています。
Here is a single answer True or False 1 True Multiple 5
Here is a single answer True or False 1 True Multiple 5
Here is a single answer True or False 1 True Multiple 5
ただし、質問の詳細はすべて同じであるため、次のように1回だけ表示する必要があります。
Here is a single answer True or False 1 True Multiple 5
まったく同じデータを持つ複数の行がある場合、クエリで行を1回表示するにはどうすればよいですか?
アップデート:
$questionquery = "
SELECT DISTINCT q.QuestionContent, o.OptionType, q.NoofAnswers, Answer, r.ReplyType,
q.QuestionMarks
FROM
(
SELECT DISTINCT q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(DISTINCT Answer ORDER BY Answer SEPARATOR '') AS Answer, r.ReplyType,
q.QuestionMarks, q.SessionId
FROM Answer an
INNER JOIN Question q ON q.QuestionId = an.QuestionId and an.SessionId = q.SessionId
JOIN Reply r ON q.ReplyId = r.ReplyId
JOIN Option_Table o ON q.OptionId = o.OptionId
WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))."
GROUP BY an.SessionId, an.QuestionId
)
AS tmpresult
ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))."
";