2009-12-18 3 views
11

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

ответ

25
$count = $db->fetchOne('SELECT COUNT(*) AS count FROM yourTable'); 
+0

+1 для fetchOne вместо fetchRow –

3

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

SELECT COUNT(*) 
FROM your_table 
3
$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 
8

Подсчет строк с 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; 
+0

Почему вы говорите: «Подсчет строк с fetchAll считается вредным»? – Andrew

+3

Ну, вы загружаете весь свой стол в память ... –

2

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

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

Не работал с фильтрацией - см. Мой ответ ... –

+0

Читайте снова, вопрос был не в фильтрации! –

+0

Ах. Извините :(Если вы отредактируете свой ответ (один символ будет делать), я смогу вернуть downvote ... :) –

4

Правильное Зенд-способ заключается в использовании 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()'); 
+0

Что такое $ table? –

+0

- это экземпляр Zend_Db_Table. Или это может быть Zend_Db_Adapter. Метод находится в обоих. Он возвращает Zend_Db_Table_Rowset для DbTable и массив для адаптера ... –

+0

Этот ответ особенно полезен, если вам нужно посчитать результаты надуманного запроса, что вы потеряли исходный набор результатов ... +1 – nzn

2

Я вроде минимализма:

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

Может использоваться в общем на все столы.

Смежные вопросы