1

私はここにアプリケーションを持っています:アプリケーション

アプリケーションは、選択された学生と選択された質問をそれぞれのドロップダウンメニューから決定する学生の回答を取得できるようにするためのフィルターとして使用したい2つのドロップダウンメニューを表示するためにあります。

ドロップダウンメニューを表示するには、アプリケーションでドロップダウンメニューAssessmentからを選択しAssessmentて送信すると、下に学生と質問のドロップダウンメニューが表示されます。

ここで私がしたいのは、ユーザーがGet Student Answersボタンをクリックしたときに学生と質問のドロップダウンメニューから選択したオプションに応じて動的なWHERE句を作成することです。

以下は現在のクエリです。クエリにはSessionId = ?、WHERE句に常にデフォルトの句が含まれている必要があります。他の句は、ユーザーが両方のドロップダウンから選択したオプションによって異なりますstudentId = ?questionId = ?

$selectedstudentanswerqry = "
SELECT
StudentAlias, q.SessionId, QuestionNo, QuestionContent, o.OptionType, GROUP_CONCAT( DISTINCT Answer
ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, 
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime
FROM Student s
INNER JOIN Student_Answer sa ON (s.StudentId = sa.StudentId)
INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId)
INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
INNER 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 (SessionId = ?)
GROUP BY sa.StudentId, q.QuestionId
ORDER BY StudentAlias, q.SessionId, QuestionNo
";

global $mysqli;
$selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry);
// You only need to call bind_param once
$selectedstudentanswerstmt->bind_param("i",$_POST["session"]);
// get result and assign variables (prefix with db)
$selectedstudentanswerstmt->execute(); 
$selectedstudentanswerstmt->bind_result($detailsStudentAlias,$detailsSessionId,$detailsQuestionNo, 
$detailsQuestonContent,$detailsOptionType,$detailsAnswer,$detailsReplyType,$detailsStudentAnswer,$detailsResponseTime);
$selectedstudentanswerstmt->store_result();
$selectedstudentanswernum = $selectedstudentanswerstmt->num_rows(); 

以下は、サンプルhtmlとしてのStudentsandQuestionsドロップダウンメニューです。

学生のドロップダウンメニュー:

<select name="student" id="studentsDrop">
<option value="All">All</option>
<option value="3">u0499220 - Jack Briggs</option>
<option value="7">u0093220 - Mary Kay</option>
</form>

質問ドロップダウンメニュー:

<select name="question" id="questionsDrop">
<option value="All">All</option>
<option value="34">1</option>
<option value="35">2</option>
<option value="36">3</option>
</form>

特定の学生が選択された場合はStudentId = ?WHERE句に含め、特定の質問番号が選択された場合はWHERE句に含めるようなものを考えていQuestionId = ?ます。ただしAll、Studentドロップダウンメニューで値が選択されている場合はStudentId = ?、特定の学生を探しているのではなく、すべての学生を探しているので、WHERE句から削除します。これはAll、[質問]ドロップダウンメニューから値が選択されている場合も同じですが、明らかにQuestionId = ?

4

2 に答える 2

0

わかりました、あなたは何を知っていますか?ここで本当の質問を誤解していると思います。これでうまくいくかもしれません:

    $selectedstudentanswerqry = "
    SELECT
    StudentAlias, q.SessionId, QuestionNo, QuestionContent, o.OptionType, GROUP_CONCAT( DISTINCT Answer
    ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, 
    GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime
    FROM Student s
    INNER JOIN Student_Answer sa ON (s.StudentId = sa.StudentId)
    INNER JOIN Student_Response sr ON (sa.StudentId = sr.StudentId)
    INNER JOIN Question q ON (sa.QuestionId = q.QuestionId)
    INNER 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";

    if (studentId = something && questionId = something) {

    $selectedstudentanswerqry .= "WHERE (SessionId = ?)
    GROUP BY sa.StudentId, q.QuestionId
    ORDER BY StudentAlias, q.SessionId, QuestionNo
    ";

    } else if (studentId = somethingelse && questionId = somethingelse) {

    $selectedstudentanswerqry .= "WHERE (SessionId = ?)
    GROUP BY sa.StudentId, q.QuestionId
    ORDER BY StudentAlias, q.SessionId, QuestionNo
    ";

    } else {
    $selectedstudentanswerqry .= "WHERE (SessionId = ?)
    GROUP BY sa.StudentId, q.QuestionId
    ORDER BY StudentAlias, q.SessionId, QuestionNo
    ";
    }
于 2013-01-27T03:44:17.207 に答える
0

ここにサブクエリを記述できることをご存知ですか?

WHERE (SessionId = ?)

お気に入り

WHERE SessionId IN(SELECT SessionId FROM ...)

http://dev.mysql.com/tech-resources/articles/subqueries_part_1.html

于 2013-01-27T02:32:33.323 に答える