[英]Count on Zend_Db_Select
假設我有一個隨機的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提取方法自動調用:
$total = $db->fetchOne($select);
echo $total; //prints the number of rows matching the query
其中$ db是Zend_Db的一個實例。
使用$select->__toString()
方法輸出生成的查詢,看看它有什么問題。
如果你的查詢中沒有from子句,請將From()
方法添加到select對象中。
如果使用Zend_Db_Select,則必須調用from方法來設置表名。 使用Zend_Db_ Table _Select,表將在構造函數中傳遞,因此您無需從中調用。
我剛遇到同樣的問題,發現出了什么問題
Zend_Db_Select::columns
函數需要一個Array而不是Object或String(當第一個參數是String或Object時,它可能會使用它作為你給出的列的主表,但我不確定。)。
將代碼更改為
$data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch();
將解決您的問題
$select = $db->select();
$select->from(
'table_name',
array('cnt' => 'count(1)')
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.