Как отображать все данные, если пользователь выбирает опцию «Все»

Ниже у меня есть два раскрывающихся меню HTML, один для студентов и другой для вопросов:

<select name="question" id="questionsDrop"> <option value="0">All</option> <option value="2">What is 2+2</option> <option value="34">What is 3+3</option> <option value="42">What is 4+4</option> <option value="51">What is 5+5/option> </select> <select name="student" id="studentsDrop"> <option value="0">All</option> <option value="23">Jay Hart</option> <option value="32">Bubba Wright</option> <option value="43">Tim Grey</option> <option value="52">Mary Pine</option> </select> 

Ниже приведен запрос mysqli, который будет выводить результаты в зависимости от параметров, выбранных из двух выпадающих меню выше:

  $selectedstudentanswerqry = " SELECT sa.StudentId, 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 st INNER JOIN Student_Answer sa ON (st.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 "; // Initially empty $where = array('q.SessionId = ?'); $parameters = array($_POST["session"]); $parameterTypes = 'i'; // Check whether a specific student was selected if($_POST["student"] != '0') { $where[] = 'sa.StudentId = ?'; $parameters[] .= $_POST["student"]; $parameterTypes .= 'i'; } // Check whether a specific question was selected // NB: This is not an else if! if($_POST["question"] != '0') { $where[] = 'q.QuestionId = ?'; $parameters[] .= $_POST["question"]; $parameterTypes .= 'i'; } // If we added to $where in any of the conditionals, we need a WHERE clause in // our query if(!empty($where)) { $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where); global $mysqli; $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry); // You only need to call bind_param once if (count($where) == 1) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0]); } else if (count($where) == 2) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1]); } else if (count($where) == 3) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1], $parameters[2]); } } $selectedstudentanswerqry .= " GROUP BY sa.StudentId, q.QuestionId ORDER BY StudentAlias, q.SessionId, QuestionNo "; ....................................................................................... $arrStudentId = array(); $arrStudentAlias = array(); $arrStudentForename = array(); $arrStudentSurname = array(); $arrQuestionNo = array(); $arrQuestionContent = array(); while ($selectedstudentanswerstmt->fetch()) { $arrStudentId[ $detailsStudentId ] = $detailsStudentId; $arrStudentAlias[ $detailsStudentId ] = $detailsStudentAlias; $arrStudentForename[ $detailsStudentId ] = $detailsStudentForename; $arrStudentSurname[ $detailsStudentId ] = $detailsStudentSurname; $arrQuestionNo[ $detailsStudentId ] = $detailsQuestionNo; $arrQuestionContent[ $detailsStudentId ] = $detailsQuestonContent; } foreach ($arrStudentId as $key=>$student) { echo '<p><strong>Question:</strong> ' .htmlspecialchars($arrQuestionNo[$key]). ': ' .htmlspecialchars($arrQuestionContent[$key]). '</p>' . PHP_EOL; } 

Теперь информация выводится без проблем, если я выбираю конкретного ученика или конкретный вопрос из соответствующих выпадающих меню, поскольку db может извлекать значения из этих выпадающих меню, поскольку они являются фактическими идентификаторами в db.

Но проблема в том, что я выбираю вариант « All из выпадающих меню. Значение параметра « All в обоих раскрывающихся меню равно 0 . Теперь 0 не находится в db в качестве id, что я хотел бы сделать, так это то, что если пользователь выбирает параметр « All , тогда он отображает All детали студента, если он выбран в раскрывающемся меню студента, All детали вопроса, если они выбраны в вопросе выпадающее меню.

Теперь запрос работает над сбором данных для этого, поскольку он использует динамическое предложение WHERE, построенное для включения соответствующих условий. Но мой вопрос заключается в том, как я могу заставить его отображать все детали учеников / вопросов, если пользователь выбрал All параметры в соответствующих раскрывающихся меню?

ОБНОВЛЕНИЕ ДЕЯТЕЛЬНОСТИ С ПОМОЩЬЮ RING0:

 Notice: Array to string conversion in ... on line 358 Warning: mysqli::prepare(): (42S22/1054): Unknown column 'Array' in 'where clause' in ... on line 360 Fatal error: Call to a member function bind_param() on a non-object in ... on line 370 

КОД ОБНОВЛЕНО:

  $selectedstudentanswerqry = " SELECT sa.StudentId, 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 st INNER JOIN Student_Answer sa ON (st.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 "; // Initially empty $where = array(); $parameters = array(); $parameterTypes = ''; // Check whether a specific session was selected if($_POST["session"] != '0') { $where[] = array('q.SessionId = ?'); $parameters[] = array($_POST["session"]); $parameterTypes .= 'i'; } // Check whether a specific student was selected if($_POST["student"] != '0') { $where[] = 'sa.StudentId = ?'; $parameters[] .= $_POST["student"]; $parameterTypes .= 'i'; } // Check whether a specific question was selected // NB: This is not an else if! if($_POST["question"] != '0') { $where[] = 'q.QuestionId = ?'; $parameters[] .= $_POST["question"]; $parameterTypes .= 'i'; } // If we added to $where in any of the conditionals, we need a WHERE clause in // our query if(count($where) > 0) { $selectedstudentanswerqry .= ' WHERE ' . implode(' AND ', $where); global $mysqli; $selectedstudentanswerstmt=$mysqli->prepare($selectedstudentanswerqry); // You only need to call bind_param once if (count($where) == 1) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0]); } else if (count($where) == 2) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1]); } else if (count($where) == 3) { $selectedstudentanswerstmt->bind_param($parameterTypes, $parameters[0], $parameters[1], $parameters[2]); } 

СКРИНШОТ:

введите описание изображения здесь

Как вы можете видеть выше, это показывает, что я выбрал ученика, но я выбрал All Qustions. Тем не менее, он отображает только один вопрос под заголовком « Student Answer , в этом примере общее количество вопросов, которые вы видите в скобках, равно 2 , поэтому он должен отображать 2 вопроса, а не один вопрос

DB SCREENSHOT:

Немного сокращенная версия обычного запроса, но это не повлияет на основной запрос, так как это тоже показывает одинаковое количество строк. Он показывает 2 строки, поскольку есть два вопроса. Ниже приведены результаты для одного студента StudentId = 1 , все вопросы в оценке 26 ( SessionId = 26 ).

введите описание изображения здесь