Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 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;
     }
 }