Doctrine 2 select count groupBy
Je suis en train de récupérer un certain nombre de lignes avec des uid uniques.
$qb->select('COUNT() as cnt')
->from($type, 'c')
->groupBy('c.organization, c.process_role, c.domain, c.year')
->getQuery()->getSingleScalarResult()
Mais elle retourne un tableau de nombre de groupes. Comment dois-je écrire ce correct?
Enfin, ça marche, mais c'est un peu laid
$count = $this->_em->createQuery( 'SELECT COUNT(c.id) FROM '.$type.' as c WHERE c.id IN ('
. 'SELECT c1.id FROM ' . $type . ' c1 '
. 'GROUP BY c1.organization, c1.process_role, c1.domain, c1.year)')
->getSingleScalarResult();
OriginalL'auteur Kamil | 2014-10-30
Vous devez vous connecter pour publier un commentaire.
Essayez de diviser votre unique
groupBy
enaddGroupBy
fonctions:Cependant, cela ne fait en retour la même chose car il va juste les résultats du groupe dans des ensembles uniques par ces 4 variables. Vous devez plutôt utiliser un
DISTINCT
méthode de sélection et de compter les lignes obtenues.C'est la seule méthode connue pour moi qui travail depuis DQL ne prend pas en charge toutes les stratégies alternatives (telles que
SELECT COUNT(*) FROM (SELECT DISTINCT ... )
)Essayons quelques droites DQL à la place. Voir mon edit. Notez que je ne voudrais pas utiliser
$type
concaténées comme ça si c'était un dangereux variable.J'ai testé toutes mes tentatives et résumés dans ma seule connue résultat correct. Donner un coup de feu.
Que jette cette exeption: la ligne 0, col près de 23 '(SELECT DISTINCT': Error: Class '(' n'est pas défini. + [1/2] QueryException: SELECT COUNT(cnt) from (SELECT DISTINCT c.organisation, c.process_role, c.domaine, c.année DE TSO\Bundle\Entity\Capacité c) cnt Et un autre au-dessus avec get scalaire unique conséquent, déclenche une exception compter sur plusieurs paramètres
Enfin, ça marche, mais c'est un peu laid $count = $this->_em->createQuery( 'SELECT COUNT(c.id) from '.$type.' c OÙ c.id IN (' . 'SELECT c1.id DE". $type . ' c1 ' . GROUPE EN c1.de l'organisation, de la catégorie c1.process_role, c1.domaine, c1.ans)') ->getSingleScalarResult();
OriginalL'auteur sjagr
Place de
$qb->select();
utilisation$qb->distinct();
. J'espère que cela fonctionne.distinct()
est une fonction qui est utilisée comme un indicateur, pas un sélecteur. Son utilisation est également pas documentés de façon je serais pas sûr de ses résultats.OriginalL'auteur webskripti.satya