2013-07-14 11 views
6

Potrzebuję twojej pomocy, proszę. Mam tej kwerendy SQL:Zapytanie SQL z liczbą i grupą według Symfony2 QueryBuilder

SELECT * , COUNT(*) AS count FROM mytable GROUP BY email ORDER BY id DESC LIMIT 0 , 30 

Ale chciałbym to zrobić w Symfony2 z doktryną i createQueryBuilder(). próbuję, ale nie działa:

$db = $this->createQueryBuilder('s'); 
$db->andWhere('COUNT(*) AS count'); 
$db->groupBy('s.email'); 
$db->orderBy('s.id', 'DESC'); 

możesz mi pomóc proszę? Dzięki :)

+0

co masz na myśli z * nie działa *? Jak "LIMIT" wyniki twojej Doctrine zostały odebrane [tutaj wcześniej] (http://stackoverflow.com/a/7404238/1847340) – ferdynator

Odpowiedz

7

Musisz uruchomić 2 zapytania:

$db = $this->createQueryBuilder(); 
$db 
    ->select('s') 
    ->groupBy('s.email') 
    ->orderBy('s.id', 'DESC') 
    ->setMaxResults(30); 

$qb->getQuery()->getResult(); 

i

$db = $this->createQueryBuilder(); 
$db 
    ->select('count(s)') 
    ->groupBy('s.email') 
    //->orderBy('s.id', 'DESC') 
    ->setMaxResults(1); 

$qb->getQuery()->getSingleScalarResult(); 
+0

Zła odpowiedź, nie prowadzi do tego samego wyniku, co w początkowym zapytaniu w pytaniu. – FlameStorm

0

Próbowałem użyć

$query->select('COUNT(DISTINCT u)'); 

i to wydaje się działać dobrze do tej pory.

1
$db = $this->createQueryBuilder('mytable'); 
$db 
    ->addSelect('COUNT(*) as count') 
    ->groupBy('mytable.email') 
    ->orderBy('mytable.id', 'DESC') 
    ->setFirstResult(0) 
    ->setMaxResults(30); 
$result = $db->getQuery()->getResult(); 

Nadzieja pomaga, nawet jeśli jest to stary stos

Powiązane problemy