Zend_Db_Table_Abstract计数

时间:2011-09-12 16:40:42

标签: zend-framework zend-db-table

在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 个答案:

答案 0 :(得分:4)

这是未经测试的,但应该让你开始:

$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 :(得分:4)

$count = $this->select()->from($this,'COUNT(*)')->query()->fetchColumn();

答案 2 :(得分:1)

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);

答案 3 :(得分:0)

这里你去了

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

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

    return $count;
}

答案 4 :(得分:-1)

如果您愿意,也可以使用fetchAll()或同等内容获取整个行集,然后使用count()

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

这可能只是最好的解决方案,如果你要用该行集做其他事情。