依靠Zend_Db_Select

时间:2010-10-10 15:26:46

标签: php zend-framework zend-db-select

假设我有一个随机的zend_db_select对象。

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

我尝试了以下内容:

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

但是这给了我以下错误:

  

消息:没有为FROM子句指定表

查询本身可以正常工作并返回结果集。

5 个答案:

答案 0 :(得分:10)

有几种方法可以指定要在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(*)')));

from方法接受第一个参数,表名和第二个参数,即要获取的列数组。如果您使用的是表达式,则可以指定'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的一个实例。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

$select = $db->select();

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

答案 4 :(得分:0)

我刚遇到同样的问题,发现出了什么问题

Zend_Db_Select::columns函数需要一个数组而不是一个Object或String(当第一个参数是一个String或Object时,它可能会使用它作为你给出的列的主表,但我不确定。 )。

将代码更改为

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

将解决您的问题