假设我有一个随机的zend_db_select对象。
如何对该对象执行计数,因此我知道满足查询的项目数量。
我尝试了以下内容:
$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();
但是这给了我以下错误:
消息:没有为FROM子句指定表
查询本身可以正常工作并返回结果集。
答案 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();
将解决您的问题