【发布时间】:2013-01-27 00:20:22
【问题描述】:
我在这里有一个应用程序:Application
该应用程序在那里向您显示我想用作过滤器的两个下拉菜单,以便能够获得学生的答案,确定所选学生和从相应下拉菜单中选择的问题.
要查看下拉菜单,请在应用程序中从Assessment 下拉菜单中选择Assessment 并提交,您将看到学生和问题下拉菜单显示在下方。
现在我要做的是创建一个动态的 WHERE 子句,这取决于用户单击Get Student Answers 按钮时从学生和问题下拉菜单中选择的选项。
以下是当前查询。查询必须在 WHERE 子句中始终具有默认子句 SessionId = ?。其他子句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:
学生下拉菜单:
<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>
我在想,如果选择了特定的学生,则在 WHERE 子句中包含 StudentId = ?,如果选择了特定的问题编号,则在 WHERE 子句中包含 QuestionId = ?。但是,如果在 Student 下拉菜单中选择了 All 值,则从 WHERE 子句中删除 StudentId = ?,因为我们正在查找所有学生,而不是针对特定学生进行缩减。如果从“问题”下拉菜单中选择了 All 值,但显然是在处理 QuestionId = ?
【问题讨论】:
-
请退出deleting questions的那个东西然后asking it again和again