Как сформировать порядок запросов к MySQL, чтобы получить пользователей?

Доброго времени суток.

Суть вопроса в том как из БД формировать запросы на получение пользователей с фильтрацией. Есть БД с таблицами, users, education_session, test_history Примерная структура: users

Таблица пользователей

education_session

Таблица сессий

test_history

Таблица истории тестирования

На сайте окно с фильтрами:

Окно с фильтрами

Вывод пользователей (примерный):

Список пользователей

Простая выборка пользователей, без фильтров, происходит следующим образом

select distinct `users`.*, `subdivisions`.`title` as `subdivision_title`, `positions`.`title` as `position_title` 
from `users` 
left join `subdivisions` on `users`.`subdivision` = `subdivisions`.`id` 
left join `positions` on `users`.`position` = `positions`.`id` 
where `users`.`role_id` = 0 
order by `users`.`full_name` asc limit 25 offset 0

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

И даже не знаю, как лучше сформировать порядок запросов для вывода пользователей, учитывая что их будет больше 1000. Смотреть сначала данные по сессиям к выбранным темам, с учетом что к разным программам могут быть разные сессии. Потом смотреть в истории тестировании, есть ли к выбранным темам по последним сессиям данные, а потом делать запрос к пользователям, по данным из истории тестирования.

Собственно вопрос, как можно лучше реализовать запросы к БД? Или как вообще переделать все возможно в более правильный вид?


Ответы (0 шт):