2017-01-18 5 views
3

я получил эти данные в моей БД:Учение - Symfony 3 QueryBuilder COUNT() неправильно

my data

Я стараюсь, чтобы получить foreign_ids с последним значением created_at в виде guest_identifier.

В этом случае я бы ожидать:

foreign_id: 5 for guest_identifier: 12345 
    foreign_id: 5 for guest_identifier: 2345 
    foreign_id: 4 for guest_identifier: 345 

Теперь я хочу, чтобы подсчитать этот результат и вернуть что-то вроде:

[ 
    { 
     "foreign_id": 5, 
     "occurrence": 2 
    }, 
    { 
     "foreign_id": 4, 
     "occurrence": 1 
    } 
] 

Это, как я стараюсь, чтобы получить этот результат:

$qb = $this->createQueryBuilder('statistic') 
     ->select('statistic.foreignId, COUNT(statistic.foreignId) as occurrence') 
     ->where('statistic.guideId = :guideId') 
     ->andWhere('statistic.type = :type') 
     ->andWhere('statistic.createdAt BETWEEN :startDate AND :endDate') 
     ->groupBy('statistic.guestIdentifier') 
     ->setParameters(array(
      'guideId' => $guideId, 
      'type' => 'answer_clicked', 
      'startDate' => $startDate, 
      'endDate' => $endDate 
     )) 
     ->getQuery(); 

    $stats = $qb->getResult(); 

    return $stats; 

Проблема в том, что мой результат выглядит следующим образом:

[ 
    { 
    "foreignId": 5, 
    "occurrence": "3" 
    }, 
    { 
    "foreignId": 5, 
    "occurrence": "3" 
    }, 
    { 
    "foreignId": 4, 
    "occurrence": "2" 
    } 
] 

Я не могу найти, почему появление является 3 вместо 2 для foreign_id: 5 и почему появление 2 вместо 1 для foreign_id: 3. Кроме того, я не»знаю, как группировать результаты в другой раз ,

ответ

1

Я мог бы решить мою проблему с этим ответом: https://stackoverflow.com/a/28090544/7069057

Моя функция теперь выглядит следующим образом:

$qb = $this->createQueryBuilder('statistic') 
     ->select('statistic.foreignId, COUNT(statistic.foreignId)') 
     ->where('statistic.guideId = :guideId') 
     ->andWhere('statistic.type = :type') 
     ->andWhere('statistic.createdAt BETWEEN :startDate AND :endDate') 
     ->leftJoin('AppBundle\Entity\Statistic\Statistic', 'stat', Join::WITH, 
      'statistic.type = stat.type AND statistic.guestIdentifier = stat.guestIdentifier AND stat.createdAt > statistic.createdAt') 
     ->andWhere('stat.createdAt IS NULL') 
     ->groupBy('statistic.foreignId') 
     ->setParameters(array(
      'guideId' => $guideId, 
      'type' => 'answer_clicked', 
      'startDate' => $startDate, 
      'endDate' => $endDate 
     )) 
     ->getQuery(); 

    $stats = $qb->getResult(); 

    return $stats; 

 Смежные вопросы

  • Нет связанных вопросов^_^