Zend_Db: Как получить количество строк в таблице? - PullRequest
12 голосов
/ 19 декабря 2009

Я хочу узнать, сколько строк в таблице. База данных, которую я использую, является базой данных MySQL. У меня уже есть класс Db_Table, который я использую для вызовов типа fetchAll(). Но мне не нужна никакая информация из таблицы, только количество строк. Как я могу получить количество всех строк в таблице без вызова fetchAll()?

Ответы [ 7 ]

26 голосов
/ 19 декабря 2009
$count = $db->fetchOne( 'SELECT COUNT(*) AS count FROM yourTable' );
8 голосов
/ 19 декабря 2009

Подсчет строк с fetchAll считается вредным.

Вот как это сделать способом Zend_Db_Select:

$habits_table = new Habits(); /* @var $habits_table Zend_Db_Table_Abstract */
$select = $habits_table->select();
$select->from($habits_table->info(Habits::NAME), 'count(*) as COUNT');
$result = $habits_table->fetchRow($select);
print_r($result['COUNT']);die;
4 голосов
/ 15 мая 2011

Правильный Zend-Way должен использовать Zend_Db_Select следующим образом:

$sql = $table->select()->columns(array('name', 'email', 'status'))->where('status = 1')->order('name');
$data = $table->fetchAll($sql);
$sql->reset('columns')->columns(new Zend_Db_Expr('COUNT(*)'));
$count = $table->getAdapter()->fetchOne($sql);

Вот как это делается в Zend_Paginator. Другой вариант - добавить SQL_CALC_FOUND_ROWS перед списком столбцов, а затем получить количество найденных строк с помощью этого запроса:

$count = $this->getAdapter()->fetchOne('SELECT FOUND_ROWS()'); 
3 голосов
/ 19 декабря 2009
$dbo->setFetchMode( Zend_Db::FETCH_OBJ );
$sql = 'SELECT COUNT(*) AS count FROM @table';
$res = $dbo->fetchAll( $sql );
// $res[0]->count contains the number of rows
3 голосов
/ 19 декабря 2009

Вы могли бы сделать

SELECT COUNT(*)
FROM your_table 
2 голосов
/ 11 мая 2012

Я своего рода минималист:

public function count()
{
    $rows = $db->select()->from($db, 'count(*) as amt')->query()->fetchAll();
    return($rows[0]['amt']);
}

Может использоваться для всех таблиц.

2 голосов
/ 14 мая 2011

Добавление возможности подсчета к вашему объекту Zend_DB Для подсчета всех строк таблицы

public function count()
{
    return (int) $this->_table->getAdapter()->fetchOne(
        $this->_table->select()->from($this->_table, 'COUNT(id)')
    );
}
...