Как я могу получить записи на основе месяца и года из таблицы? - PullRequest
0 голосов
/ 19 февраля 2019

Можем ли мы использовать только часть месяца и года в предложении where для фильтрации поля даты?

    SELECT `outlet`.`outlet`,cities.`city`,teritory.`teritory`,region.`region`,`countries`.`country` FROM `audit`
    JOIN `user` ON `user`.`id`=`audit`.`auditor_id`
    JOIN `user_outlet` ON `user_outlet`.id=`audit`.`outlet_id`
    JOIN `outlet` ON `outlet`.id=`user_outlet`.`outlet_id`
    JOIN `cities` ON `cities`.`id`=`outlet`.`city_id`
    JOIN `teritory_city` ON `teritory_city`.`city_id`=`cities`.id
    JOIN `teritory` ON `teritory_city`.`teritory_id`=`teritory`.`id`
    JOIN `region` ON `region`.`id`=`teritory`.`region_id`
    JOIN `org_country` ON `org_country`.`id`=`region`.`org_country_id`
    JOIN `countries` ON `countries`.`id`=`org_country`.`country_id`
    WHERE `audit`.`created_date`=?

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

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Старайтесь избегать использования функций для столбцов в предложениях WHERE.Это может помешать оптимизатору выбрать лучший план оптимизации.

Я бы предложил:

where audit.created_date >= date(concat_ws('-', @yearparam, @monthparam, 1) and
      audit.created_date < date(concat_ws('-', @yearparam, @monthparam, 1) + interval 1 month
0 голосов
/ 19 февраля 2019

Используйте функции year() и month(), как показано ниже -

SELECT `outlet`.`outlet`,cities.`city`,teritory.`teritory`,region.`region`,`countries`.`country` FROM `audit`
JOIN `user` ON `user`.`id`=`audit`.`auditor_id`
JOIN `user_outlet` ON `user_outlet`.id=`audit`.`outlet_id`
JOIN `outlet` ON `outlet`.id=`user_outlet`.`outlet_id`
JOIN `cities` ON `cities`.`id`=`outlet`.`city_id`
JOIN `teritory_city` ON `teritory_city`.`city_id`=`cities`.id
JOIN `teritory` ON `teritory_city`.`teritory_id`=`teritory`.`id`
JOIN `region` ON `region`.`id`=`teritory`.`region_id`
JOIN `org_country` ON `org_country`.`id`=`region`.`org_country_id`
JOIN `countries` ON `countries`.`id`=`org_country`.`country_id`
WHERE year(`audit`.`created_date`)=yearparam and month(`audit`.`created_date`)=monthparam
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...