Zend_Db_Table_Abstract count - PullRequest
       10

Zend_Db_Table_Abstract count

2 голосов
/ 12 сентября 2011

В Zend_Db_Table_Abstract я использую этот код, чтобы получить счетчик результатов для моего выбора:

$this->setTableName('visitors');
$select = $this->select()
               ->from('visitors')
               ->columns(array('total' => new Zend_Db_Expr('COUNT(*)')))
               ->where('...');
$visits = $this->_fetch($select);

Есть ли лучший способ, т. Е. Просто вернуть счет.Это возвращает некоторые другие данные в массиве ... Я просто хочу подсчет результатов.В прямой mySQl эквивалент будет select count( mycol ) from visitors where ....

Ответы [ 5 ]

4 голосов
/ 12 сентября 2011
$count = $this->select()->from($this,'COUNT(*)')->query()->fetchColumn();
4 голосов
/ 12 сентября 2011

Это не проверено, но вы должны начать:

$results = $this->getAdapter()
  ->query("SELECT COUNT(*) AS total FROM visitors WHERE ...")
  ->fetchAll();
$visits = $results[0]["total"];

Вам не нужно использовать интерфейс Таблица / Выбор для каждого запроса.


обновление: +1 к комментарию от @SMka, для указания, что это может быть еще проще:

$visits = $this->getAdapter()
  ->fetchOne("SELECT COUNT(*) AS total FROM visitors WHERE ...");
1 голос
/ 12 сентября 2011

http://framework.zend.com/manual/en/zend.db.adapter.html

см. fetchOne

$this->setTableName('visitors');
$select = $this->select()
               ->from('visitors')
               ->columns(array('total' => new Zend_Db_Expr('COUNT(*)')))
               ->where('...');
$count = $this->getAdapter()->fetchOne($select);
0 голосов
/ 02 июня 2012

вот ты иди

public function fetchCount($data)
{
    $sql = "SELECT COUNT(*) AS count FROM table WHERE field = ".$data;

    $count = $this->db->fetchOne($sql, array('count'));

    return $count;
}
0 голосов
/ 12 сентября 2011

Если вы хотите, вы также можете просто получить весь набор строк с fetchAll() или его эквивалентом, а затем использовать count():

$rows = $table->fetchAll();
$count = count($rowset);

Возможно, это только лучшее решение, если вы будете делать что-то еще с этим набором строк.

...