@Denisido

Как формировать структуру MySQL-запроса, если пользователь выбирает разные варианты фильтров?

Подскажите как формировать динамический запрос при разных фильтрах (запрос по умолчанию, по заявкам, по гаражным номерам ТС, по модели и т.д.)? Например:
<?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-запросов по фильтрам пользователей.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
если пользователю необходимо выбрать нужную Модель за определенный промежуток времени?

https://dev.mysql.com/doc/refman/8.0/en/comparison...

И в выполнить (execute) некорые записи тоже должны меняться

Может, плейсхолдеры, а не записи? Ну, так формируйте массив через if, а потом массив передавайте в execute().

где почитать полезную информацию о формировании динамических SQL-запросов по фильтрам пользователей

Удобнее использовать QueryBuilder
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы