我正在开发一个投票系统,用户可以对某个问题投票赞成,不投票或不投票。
这些表存储在voteOptions
表choice
中,其值为0,1和2,附加到存储其他信息的vote
表。我努力研究如何在单一功能中计算投票数。
以下功能统计单个choice
,我目前为每个voteOption
调用一次。我计算不同的用户,因为他们可以出现不止一次,但只有他们的最后一次投票才算得上:
public function countPollVotesByIsCurrentAndChoice(Poll $poll, $choice) {
return $this->createQueryBuilder('v')
->leftJoin('v.voteOptions', 'vo')
->andWhere('v.poll = :poll')
->andWhere('v.isCurrentVote = :isCurrentVote')
->andWhere('vo.choice = :choice')
->setParameters(['isCurrentVote' => true, 'poll' => $poll, 'choice' => $choice])
->select('COUNT(DISTINCT v.user) AS vote_count')
->getQuery()
->getSingleScalarResult();
}
但我更愿意拨打一个电话来获得所有3项罪名。我真的很感激有关如何做到这一点的任何建议。
答案 0 :(得分:0)
您必须将COUNT()与GROUP BY一起使用,它将选项聚合为三个可能的答案,COUNT函数计算每个答案的记录数。
$query = $em->createQuery('SELECT count(vo.choice) AS cnt FROM AppBundle:Vote v JOIN v.voteOptions vo WHERE ... GROUP BY vo.choice');
$result = $query->getResult();
此查询不会返回包含Vote对象的数组,而只返回包含列名和值的行的数组。 print_r()会帮助你