2010-10-10 47 views
4

说我有一个随机的zend_db_select对象。依靠Zend_Db_Select

如何对该对象执行计数,以便知道满足查询的项目数量。

我试过如下:

$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch(); 

但是这给了我以下错误:

Message: No table has been specifiedfor the FROM clause

查询本身工作正常,并返回一个结果。

回答

1

使用$select->__toString()方法来输出您生成的查询,并查看它出了什么问题。

如果您在查询中没有from子句,请将From()方法添加到您选择的对象中。

1

如果您使用Zend_Db_Select,则必须调用from方法来设置表名称。使用Zend_Db_ _Select,该表在构造函数中传递,因此您不需要从中调用。

9

有几种指定要在Zend_Db_Select中获取的列的方法。下面的两个产品的同一SQL

$select = $db->select() 
      ->from('myTable', array()) 
      ->columns(array('TotalRecords' => new Zend_Db_Expr('COUNT(*)'))); 

$select = $db->select() 
      ->from('myTable', array('TotalRecords' => new Zend_Db_Expr('COUNT(*)'))); 

在从方法需要一个第一个参数,表格名,和一个第二个参数,列的阵列来获取。如果你使用表达式,你可以指定一个'key'=> Expr。

将Zend_Db_Select转换为SQL字符串以进行调试或与其他函数一起使用是非常容易的。

echo $select; // prints SELECT COUNT(*) AS `TotalRecords` FROM `myTable` 

这将使用toString方法,它是自动调用由Zend_Db的获取方法:

$total = $db->fetchOne($select); 

echo $total; //prints the number of rows matching the query 

其中$ db是Zend_Db的实例。

0
$select = $db->select(); 

$select->from(
    'table_name', 
    array('cnt' => 'count(1)') 
); 
0

我刚刚遇到了同样的问题,并发现了什么错误

Zend_Db_Select::columns职能期待一个数组,而不是一个对象或字符串(当第一个参数是一个字符串或对象时,它可能会使用这个作为你给的列的主表,但林不知道这一点。)。

改变你的代码

$data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch(); 

将解决您的问题