Получить отчеты из базы данных всех месяцев

67
8

Я разрабатываю веб-приложение в symfony. Я хочу получать записи из базы данных в соответствии с месяцами. Мой запрос:

$totalSearchesByAdminAll = $em->createQueryBuilder()
->select('count(SearchHistory.id) AS totalSearchesByAdmin')
->from('DRPAdminBundle:Log', 'SearchHistory')

->where('SearchHistory.last_updated like :last_updated')
->setParameter('last_updated',??????.'%')

->andwhere('SearchHistory.event = :event')
->setParameter('event','ADMIN_SEARCH')
->getQuery()
->getArrayResult();

last_updated - это поле datetime и хранится в базе данных: 2015-06-12 11:50:44

Мне нужны записи, такие как Jan => 5 Feb => 10..... и так далее..

Пожалуйста помоги

спросил(а) 2015-08-05T16:46:00+03:00 4 года, 11 месяцев назад
1
Решение
67

Вы можете группировать свои данные по месяцам и годам с помощью DATE_FORMAT mysql.

Чтобы использовать функцию mysql в инструкции DQL Doctrine, я предлагаю вам установить функцию доктрины mapado/mysql-doctrine- functions. Просто добавьте в свой composer.json и включите его в config.yml следующим образом:

#app/config/config.yml

orm:
auto_generate_proxy_classes: %kernel.debug%

entity_managers:
default:
mappings:
....
dql:
datetime_functions:
date_format: Mapado\MysqlDoctrineFunctions\DQL\MysqlDateFormat

Затем вы можете использовать в репозитории в качестве примера:

$qb = $this->createQueryBuilder('p')
->select("DISTINCT DATE_FORMAT(p. last_updated,'%m-%Y') as formatted_date")
->andwhere('p.SearchHistory.event = :event')
->setParameter('event','ADMIN_SEARCH')
->addGroupBy("formatted_date")
->orderBy('p.last_updated')
->getQuery()
->getResult();

Вам нужно изменить пример, чтобы добавить счетчик

Надеюсь, это поможет.

ответил(а) 2015-08-05T17:00:00+03:00 4 года, 11 месяцев назад
54

Вы можете группировать по месяцам в SQL:

 $totalSearchesByAdminAll = $em->createQueryBuilder()
->select('count(SearchHistory.id) AS totalSearchesByAdmin')
->addSelect('MONTH(last_updated) AS month')
->from('DRPAdminBundle:Log', 'SearchHistory')
->where('SearchHistory.last_updated >= :last_updated')
->setParameter('last_updated','2015-06-12 11:50:44')
->andwhere('SearchHistory.event = :event')
->setParameter('event','ADMIN_SEARCH')
->groupBy('month')
->getQuery()
->getArrayResult();

не забудьте добавить в свою конфигурацию доктрины:

doctrine:
orm:
dql:
string_functions:
MONTH: DoctrineExtensions\Query\Mysql\Month

ответил(а) 2015-08-05T17:05:00+03:00 4 года, 11 месяцев назад
54

базовый запрос:

select count(last_updated), month(last_updated)  from TABLENAME group by month(last_updated)

ответил(а) 2015-08-05T16:51:00+03:00 4 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема