Как лучше составлять запрос к БД с учетом фильтров и сортировок?

Camillo

Новичок
Как лучше составлять запрос к БД с учетом фильтров и сортировок?

Здравствуйте.

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

Допустим, я хочу сперва отфильтровать данные по какому-нибудь полю; потом полученный результат отсортировать по дате и перейти на вторую страницу полученного результата.

Я понимаю, что нужно писать сложный динамический запрос, но возможно есть какие-то стандартные решения, которые в дальнейшем позволят избежать ошибок и переделок?

Если есть какие-то ссылки на эту тему - был бы просто счастлив!

P.S. Для работы с мускулем юзаю DBSimple.

Спасибо.
 

zerkms

TDD infected
Команда форума
для частных случаев вполне подходят частные реализации...
если хочется чего-то универсального, то попробуй написать генератор запросов. как показывает практика - очень хороший способ поднять скилл :)

[ad]
я в своё время реализовал сабж вот так: http://www.mzz.ru/docs/db.queries.html
[/ad]
 

Camillo

Новичок
zerkms, Спасибо.

Почитал как это реализовано в твоём фрейворке. Пока что мне кажется, что это примерно то же самое, что макроподстановки в DBSimple, см. http://dklab.ru/lib/DbSimple/manual.html#list33

Буду вникать дальше...
 

dimagolov

Новичок
Camillo, вот тема, в которой обсуждается сортировка на клиенте. Автор сделал серьезное и производительное решение на JS для этого, стоит посмотреть.
 

Camillo

Новичок
dimagolov, это классное и простое решение (я его ужо использую), но подходит оно к сожалению только для одностраничных таблиц... Если же мне хочется посмотреть на вторую страницу таблицы с уже примененным фильтром - оно не подходит. :(

В принципе, я уже решил вопрос сортировки созданием сложной структуры макроподстановок. Запарился конечно, но всё получилось. Правда страшно смотреть на код - если через недельку загляну возможно ничего и не пойму. :)
 

dimagolov

Новичок
Camillo, совсем не обязательно отображать все, что есть на клиенте. можно держать там JS массив и выводить его по-странично.
 
Сверху