簡體   English   中英

依靠Zend_Db_Select

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM