Как выбрать уникальных посетителей (пользователей) на определенный день? - PullRequest
0 голосов
/ 17 июня 2020

Я могу брать уникальных пользователей на все дни, но если я ввожу определенный день, то получаю пустой массив.

$query = $this->createQueryBuilder('a')
        ->leftJoin('a.event', 'e')
        ->leftJoin('a.customer', 'c')
        ->select('count(date_format(a.date, \'%Y %m %d\'))')
        ->where('e.id = :id')
        ->andWhere('a.page = :page')
        ->andWhere('c.status = :customer')
        ->setParameter('id', $event)
        ->setParameter('page', $page)
        ->setParameter('customer', $customer)
        ->groupBy('c.id')
        ->having('count(distinct date_format(a.date, \'%Y %m %d\')) > 1');

    if ($date != '') {
        $query = $query
            ->andWhere('date_format(a.date, \'%m/%d/%Y\') = :date')
            ->setParameter('date', $date);
    }
    $query = $query->getQuery()->getResult();

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

не знаю, что означает «а» в вашем запросе, но предположим, что он собирает участие в вашем мероприятии:

customer | event | date
 A       |  1    | 2020-06-17
 A       |  1    | 2020-06-18
 B       |  1    | 2020-06-18

теперь вы устанавливаете $date на 2020-06-17. ваше предложение andWhere затем удалит записи с другими датами:

 A       |  1    | 2020-06-17

теперь запрос сгруппирован (из-за исходного запроса), а having(count(distinct date) > 1) (упрощенный) отфильтровывает последнюю оставшуюся строку.

это, очевидно, в предположении, что таблица имеет семантику, которую я предполагаю

, поэтому вы, вероятно, захотите какой-нибудь другой лог c в вашем having (возможно,> 0) или используйте только это когда $date не установлен или что-то еще.

0 голосов
/ 17 июня 2020

из symfony отладчика вы найдете исполняемый запрос (под doctrine), который вы можете использовать для запуска в своем клиенте базы данных напрямую и посмотреть, не хватает ли чего-либо, например, формата даты или чего-то еще.

...