Zend_Db:如何从表中获取行数?

12

我想找出表中有多少行。我使用的数据库是MySQL数据库。我已经有一个Db_Table类用于调用fetchAll()之类的函数。但我不需要表中的任何信息,只需要行数。如何在不调用fetchAll()的情况下获取表中所有行的计数?

7个回答

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

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;

为什么你说“使用fetchAll计算行数是有害的”? - Andrew

5

使用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()'); 

它是Zend_Db_Table实例。或者它也可以是Zend_Db_Adapter。该方法在两者中都存在。对于DbTable,它返回Zend_Db_Table_Rowset,对于Adapter,则返回数组... - Tomáš Fejfar
如果您需要计算一个人为查询的结果,而且您已经丢失了原始结果集,那么这个答案尤其有用... +1 - nzn

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

2
为了统计表格中的所有行数,您可以为您的Zend_DB对象添加计数功能。
public function count()
{
    return (int) $this->_table->getAdapter()->fetchOne(
        $this->_table->select()->from($this->_table, 'COUNT(id)')
    );
}

请再读一遍,问题不是关于过滤的! - Roy Toledo
啊,抱歉:( 如果您编辑您的回答(一个字符就可以),我就能取消踩了... :) - Tomáš Fejfar
Zend的一致性确实需要解决 :) - Roy Toledo
1
我的Zend表版本不知道fetchOne(),但它知道fetchRow()。我不明白为什么这个答案没有任何赞同。使用这个框架确实是正确的方法。 - Serge Wautier

2

我有点儿极简主义:

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

可以通用于所有表格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接