假设我有一个随机的 zend_db_select 对象。
如何对该对象进行计数,以便知道满足查询的项目数量。
我尝试了以下方法:
$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();
但这给了我以下错误:
消息:没有为 FROM 子句指定表
查询本身可以正常工作并返回结果集。
假设我有一个随机的 zend_db_select 对象。
如何对该对象进行计数,以便知道满足查询的项目数量。
我尝试了以下方法:
$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();
但这给了我以下错误:
消息:没有为 FROM 子句指定表
查询本身可以正常工作并返回结果集。
有几种方法可以在 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 的 fetch 方法自动调用:
$total = $db->fetchOne($select);
echo $total; //prints the number of rows matching the query
其中 $db 是 Zend_Db 的一个实例。
使用$select->__toString()
方法输出您生成的查询,看看它有什么问题。
如果您的查询中没有 from 子句,请将From()
方法添加到您的选择对象。
如果你使用 Zend_Db_Select,你必须调用 from 方法来设置表名。使用 Zend_Db_Table_Select ,表在构造函数中传递,因此您不需要调用 from。
我刚遇到同样的问题,发现出了什么问题
这些Zend_Db_Select::columns
函数需要一个数组而不是对象或字符串(当第一个参数是字符串或对象时,它可能会将其用作您提供的列的主表,但我不确定。)。
将您的代码更改为
$data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch();
将解决您的问题
$select = $db->select();
$select->from(
'table_name',
array('cnt' => 'count(1)')
);