0

以下に質問があります:

$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"))."
";
4

2 に答える 2

0

句を展開GROUP BYして、行と見なす列を以下のような重複として追加します

GROUP BY an.SessionId, an.QuestionId, QuestionContent,  
         OptionType, q.NoofAnswers, Answer, q.QuestionMarks
于 2012-11-11T14:16:51.260 に答える
0

クレイジーなアイデアかもしれませんが、それでも試してみる価値はあります。メインクエリからサブクエリを作成し、DISTINCTを使用してそこから別の選択を行います。

 SELECT DISTINCT {yourcolumns}
 FROM
 (
        your current code
 ) as tmp
于 2012-11-11T15:13:18.930 に答える