2015-07-30 14 views
6

Mam następujące wyrażenie sql, które chcę przekształcić w konstruktora kwerend doktryny. Celem jest, aby policzyć ile istnieją wskaźniki o wartości znamionowej 1, o wartości znamionowej 2.Doctrine Query Builder Wybierz liczbę z przypadkiem

SELECT 
COUNT(CASE WHEN rating.rating = 1 THEN rating.rating END) as rat1, 
COUNT(CASE WHEN rating.rating = 2 THEN rating.rating END) as rat2 
FROM rating 

Ta instrukcja SQL działa poprawnie - ale gdy próbuję przekształcić go w oświadczeniu doktrynie nie ma już. Kiedy nic nie powinno zostać policzone (ponieważ nie istnieją oceny dla tej wartości), zwraca mi "1" zamiast 0. Jak mogę powiedzieć doktrynie, aby po prostu zwróciła zero, gdy nie ma co liczyć? Próbowałem go usuwając „else 0”, ale wtedy pojawia się błąd, że wymagana jest ta część ..

return $qb 
     ->addSelect('COUNT(CASE WHEN r.rating = 1 THEN r.rating ELSE 0 END) as rat_1') 
     ->addSelect('COUNT(CASE WHEN r.rating = 2 THEN r.rating ELSE 0 END) as rat_2') 
     ->getQuery() 
     ->getResult(); 

Pozdrowienia,

"sum" is not required - example: votings 2,2,2,2,2 should return 5 , because the rating with value 2 got voted 5 times.

+0

użycie 'sum' zamiast' count' aby uzyskać to, czego potrzebują. –

+0

hej, nie chcę podsumować wartości 1 + 1 + 1 + 1 lub 2 + 2 + 2 + 2 +, chcę policzyć, jak często wartość została oceniona, np. 2 + 2 + 2 + 2 = 4 (razy dla oceny z wartością 2). Pozdrawiam – user3746259

Odpowiedz

3

Jak VKP wspomniano, można użyć SUM ale zamiast zsumowanie oceny sumy, albo 1 lub 0 do symulacji COUNT

SUM(CASE WHEN r.rating = 1 THEN 1 ELSE 0 END) 
+0

dokładnie to, czego potrzebowałem. To jest obejście, ponieważ nie mogę tutaj bezpośrednio korzystać z hrabiego? Dziękuję Ci. – user3746259

+0

Dobrze, dobrze wiedzieć. Prawie przestraszyłem: x haha ​​ – user3746259

+1

Twój komentarz do edycji jest fałszywy - podczas używania dql wyrzuca "Błąd: nieoczekiwany" NULL "". SUM - sugestia działa dobrze. – user3746259

3

aby obliczyć różne identyfikatory w jednej kolumnie w zależności od wartości w drugim kolumna odpowiedź z Fuzzy Tree nie działa w tym przypadku.

Aby policzyć tylko odrębne wartości należy podać null jako parametr i ustawić go na null jak:

->addSelect('COUNT(DISTINCT(CASE WHEN r.rating = 1 THEN rating.rating ELSE :nada END)) as rat_1') 
->setParameter(':nada', null) 
Powiązane problemy