ドロップダウン メニューから選択したオプションに応じて、正しい WHERE 句をコンパイルする動的な WHERE 句を作成しようとしています。しかし、私はそれを正しくやっているとは思いません。
まず最初に、デフォルトの WHERE 句が必要です。ドロップダウン メニューからどのオプションが選択されても、選択されているかどうかをチェックする WHERE 句が存在する必要がありSessionId
ます。SessionId = ?
次に、ドロップダウン メニューから選択したオプションに応じて、WHERE 句の他のフィールドをコンパイルします。と の 2 つのドロップダウン メニューがありStudents
ますQuestions
。考えられる結果は次のとおりです。
Student selected != 'All'
: 追加StudentId
= ? WHERE 句内
: = ?をStudent selected == 'All'
削除します。StudentId
WHERE 句から
: = ?Question selected != 'All'
を追加します。QuestionId
WHERE 句内
: = ?をQuestion selected == 'All'
削除します。QuestionId
WHERE句から
私の質問は、これをどのように設定できますか?
以下は私が現在持っているものです:
if(isset($_POST['answerSubmit'])) // we have subbmited the third form
{
$selectedstudentanswerqry = "
SELECT
StudentAlias, StudentForename, StudentSurname, q.SessionId, QuestionNo, QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT( DISTINCT Answer
ORDER BY Answer SEPARATOR ',' ) AS Answer, r.ReplyType, QuestionMarks,
GROUP_CONCAT(DISTINCT StudentAnswer ORDER BY StudentAnswer SEPARATOR ',') AS StudentAnswer, ResponseTime, MouseClick, StudentMark
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 ($_POST['student'] != 'All'){
$selectedstudentanswerqry .= "
WHERE (SessionId = ? AND StudentId = ?)
";
}
if ($_POST['question'] != 'All'){
$selectedstudentanswerqry .= "
WHERE (SessionId = ? AND QuestionId = ?)
";
}
$selectedstudentanswerqry .= "
GROUP BY sa.StudentId, q.QuestionId
ORDER BY StudentAlias, q.SessionId, QuestionNo
";
global $mysqli;
$selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry);
if ($_POST['student'] != 'All'){
// You only need to call bind_param once
$selectedstudentanswerstmt->bind_param("ii",$_POST["session"],$_POST["student"]);
}
if ($_POST['question'] != 'All'){
// You only need to call bind_param once
$selectedstudentanswerstmt->bind_param("ii",$_POST["session"],$_POST["question"]);
}
// get result and assign variables (prefix with db)
$selectedstudentanswerstmt->execute();
$selectedstudentanswerstmt->bind_result($detailsStudentAlias,$detailsStudentForename,$detailsStudentSurname,$detailsSessionId,$detailsQuestionNo,
$detailsQuestonContent,$detailsOptionType,$detailsNoofAnswers,$detailsAnswer,$detailsReplyType,$detailsQuestionMarks,$detailsStudentAnswer,$detailsResponseTime,
$detailsMouseClick,$detailsStudentMark);
$selectedstudentanswerstmt->store_result();
$selectedstudentanswernum = $selectedstudentanswerstmt->num_rows();
}
?>