стандартная бекофисная задача:
есть список записей, к ним нужно приделать фильтр (+ORDER, +GROUP BY) а также постраничную разбивку.
Первое что приходит в голову это создать обьект Filter который будет уметь себя отображать, а также добавлять условия, примерно так:
$filter = new Filter();
$filter->addCondition($fieldName, $string, $conditionType);
//@param conditionType: like, startWith, greater, ... etc.
...
$fiter->addOrder($fieldName, ORDER_TYPE);
...
$filter->setLimit($from, $to);
и сохранять этот обьект например в сессии (не суть важно где)
потом использовать его в SQL запросе:
$query = "SELECT id, name, email FROM users " . $filter->getConditions() . $filter->getOrders() . $filter->getLimit();
тут бы и взяться за работу, но:
1) есть сомнения что такие фокусы пройдут с более сложными запросами (с JOIN-нами например)
2) как то не очень елегантно смотрится второй блок кода :-)
Сейчас размышляю над таким вариантом:
сделать mapping обьекта (того который извлекается запросом, в данном случае User). Все условия и ограничения добавлять в XML-ю модель, а потом генерить SQL запрос.
Что думаете, бредовая идея? К тому же не могу найти никакого PHP инструмента (класса) для маппинга, кто знает подскажите - если даже для данной задачи его не применю, все равно пригодится.