/** * Retrieves poll results * * @return array **/ public function getResults() { $c = new Criteria(); $c->add(sfPollAnswerPeer::POLL_ID, $this->getId()); $c->addJoin(sfPollUserAnswerPeer::ANSWER_ID, sfPollAnswerPeer::ID); $c->clearSelectColumns(); $c->addSelectColumn(sfPollAnswerPeer::ID); $c->addSelectColumn(sfPollAnswerPeer::NAME); $c->addAsColumn('count_votes', 'COUNT(' . sfPollUserAnswerPeer::ID . ')'); $c->addAsColumn('total_votes', '(SELECT COUNT(' . sfPollUserAnswerPeer::ID . ') FROM ' . sfPollUserAnswerPeer::TABLE_NAME . ' WHERE ' . sfPollUserAnswerPeer::POLL_ID . '=' . $this->getId() . ')'); $c->addGroupByColumn(sfPollUserAnswerPeer::ANSWER_ID); $rs = sfPollAnswerPeer::doSelectRS($c); $results = array(); while ($rs->next()) { $count = $rs->getString(3); $total = $rs->getString(4); if (!$total) { break; // Avoid division by zero } $id = $rs->getString(1); $percent = $count * 100 / $total; $results[$id] = array('name' => $rs->getString(2), 'count' => $count, 'percent' => $percent); } foreach ($this->getsfPollAnswers() as $answer) { if (!array_key_exists($answer->getId(), $results)) { $results[$answer->getId()] = array('name' => $answer->getName(), 'count' => 0, 'percent' => 0); } } return $results; }
public static function doCountJoinAll(Criteria $criteria, $distinct = false, $con = null) { $criteria = clone $criteria; $criteria->clearSelectColumns()->clearOrderByColumns(); if ($distinct || in_array(Criteria::DISTINCT, $criteria->getSelectModifiers())) { $criteria->addSelectColumn(sfPollAnswerPeer::COUNT_DISTINCT); } else { $criteria->addSelectColumn(sfPollAnswerPeer::COUNT); } foreach ($criteria->getGroupByColumns() as $column) { $criteria->addSelectColumn($column); } $criteria->addJoin(sfPollAnswerPeer::POLL_ID, sfPollPeer::ID); $rs = sfPollAnswerPeer::doSelectRS($criteria, $con); if ($rs->next()) { return $rs->getInt(1); } else { return 0; } }