Ваша проблема с производительностью связана с вложенными запросами к базе данных.Вы можете сделать это лучше с помощью одного запроса, содержащего JOIN.Я должен угадать на вопрос, потому что вы не показали свои определения таблиц.
SELECT s.sub_cat_id,
s.sub_cat_name.
i.roll_no,
i.st_name,
i.st_mobile,
i.st_dob
FROM all_services s
WHERE s.school_id='$school_id'
JOIN student_info i ON s.sub_cat_id = i.st_class
ORDER BY s.sub_cat_name,
i.roll_no + 0 ASC,
st_name ASC;
Тогда ваш PHP-код должен сделать что-то вроде этого:
$previous_class_id = -10000;
$sql_query = mysqli_query($conn7,$the_query_above);
while($display = mysqli_fetch_assoc($sql_query))
{
$class_id = $display['sub_cat_id'];
if ($class_id != $previous_class_id)
{
/* html for the checkboxes, etc for each class */
}
/* html for the student details */
if ($class_id != $previous_class_id)
{
$previous_class_id = $class_id;
/* html for the ends of lists of students </ul> </li> and the like */
}
}
Логика о $previous_class_id
позволяет разбить рендеринг вашего результата от класса к классу.в некоторых языках (например, PL/1
, посмотрите -) есть
ON CHANGE $class_id { do something }
, но в php вы должны его подделать.
Для дальнейшего использования: трудно было угадатьтвой вопрос, какова была твоя настоящая проблема.Определенно стоит потратить время на то, чтобы сформулировать вопросы более точно.