Подскажите как формировать динамический запрос при разных фильтрах (запрос по умолчанию, по заявкам, по гаражным номерам ТС, по модели и т.д.)? Например:
<?php
// Фильтры формируются динамически, что пользователь выбирает, то и будет показываться. Выбор может быть разным, юзер может выбрать все или конкретное условие!
$filter = ['заявка', 'гар.№', 'время', 'модель ТС', 'вид ТС', 'тип заявки', 'статус заявки', 'сколько строк показывать', 'Участок ТС', 'и т.д.'];
$step = 20; // показать записей
$last = 1000; // определяется динамически
$next = $last - $step;
// по умолчанию...
$stmt = $pdo->prepare("
SELECT SQL_NO_CACHE
`table1`.`idRequest`, -- заявка
`table1`.`time`, -- время заявки
`table1`.`idTransport`, -- Гар.№
`mode`.`name`, -- Вид ТС
`model`.`name` -- Модель ТС
FROM
`table1`
INNER JOIN
`transport` ON `transport`.`idTransport` = `table1`.`idTransport`
INNER JOIN
`mode` ON `mode`.`idMode` = `transport`.`idMode`
INNER JOIN
`model` ON `model`.`idModel` = `transport`.`idModel`
WHERE
`table1`.`idRequest` <= :last AND `table1`.`idRequest` > :next
ORDER BY `table1`.`idRequest`
DESC;
");
$stmt->execute( array(':last' => $last, ':next' => $next) );
?>
Работать с каждым фильтром отдельно особых трудностей не возникает (в условие WHERE добавляем AND .... , а в ORDER через запятую нужный столбец). НО что, если пользователю необходимо выбрать нужную Модель за определенный промежуток времени? Тогда ИД заявок (индекс) в сортировку (ORDER BY `table1`.`idRequest`) не попадает, необходимо использовать другие индексы, а SQL-запрос немного меняет свою структуру на выборку. И в выполнить (execute) некорые записи тоже должны меняться. Что делать в таком случае?
Может есть какие примеры, статьи на эту тему? Или у Вас есть решения подобных задач?
Подскажите, в какую сторону смотреть (ресурсы), где почитать полезную информацию о формировании динамических SQL-запросов по фильтрам пользователей.