2015-07-30 14 views
6

Doktrin sorgu oluşturucusuna dönüştürmek istediğim şu sql deyimim var. Amaç Bu sql deyimi iyi çalışıyor derecelendirme değeri 1 ile ve derecelendirme değeri 2.Doktrin Sorgu Oluşturucusu Case ile Sayımı Seç

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 

ile var kaç puan saymaktır - ama Doktrin deyimi haline dönüştürmek çalıştığınızda, artık yok. Hiçbir şey sayılmayacaksa (bu değer için herhangi bir derecelendirme olmadığı için), bana 0 yerine "1" değerini döndürür. Sayılacak hiçbir şey olmadığında doktrini basitçe sıfırlamak için nasıl söyleyebilirim? ..

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(); 

Saygılarımızla, ben "BAŞKA 0" çıkararak denedim ama sonra bu kısmı gerekli olduğunu bir hata alıyorum

"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

kullanım 'neye ihtiyacınız almak için yerine' count' ait sum'. –

+0

hey, 1 + 1 + 1 + 1 veya 2 + 2 + 2 + 2 + değerlerini toplamak istemiyorum, bir değerin ne sıklıkta derecelendirildiğini saymak istiyorum, ör. 2 + 2 + 2 + 2 = 4 (2 değeri ile derecelendirme için zaman). Tam olarak ihtiyacım olanı – user3746259

cevap

3

vkp belirtildiği gibi, SUM kullanabilirsiniz ancak Bunun yerine sayısı, bir miktar ya da bir 1 ya da 0 toplanmasıyla bir COUNT

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

. Yani bu geçici çözümdür, çünkü bir Kontu doğrudan burada kullanamıyorum. Teşekkür ederim. – user3746259

+0

Tamam, bilmek güzel. Neredeyse korktum: x haha ​​ – user3746259

+1

Düzenleme yorumun yanlıştır - dql kullanırken "Hata: Beklenmeyen 'NULL'" atar. SUM - öneri iyi çalışıyor. – user3746259

3

başka değerine bağlı olarak tek bir sütunda farklı id saymak için simüle etmek için Bu durumda Fuzzy Tree'nin cevabı sütun çalışmıyor.

parametre olarak boş vermelidir sadece farklı değerleri saymak ve benzeri null olarak ayarlamak için:

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