2010-10-10 46 views
4

說我有一個隨機的zend_db_select對象。依靠Zend_Db_Select

如何對該對象執行計數,以便知道滿足查詢的項目數量。

我試過如下:

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

但是這給了我以下錯誤:

Message: No table has been specifiedfor the FROM clause

查詢本身工作正常,並返回一個結果。

回答

1

使用$select->__toString()方法來輸出您生成的查詢,並查看它出了什麼問題。

如果您在查詢中沒有from子句,請將From()方法添加到您選擇的對象中。

1

如果您使用Zend_Db_Select,則必須調用from方法來設置表名稱。使用Zend_Db_ _Select,該表在構造函數中傳遞,因此您不需要從中調用。

9

有幾種指定要在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(*)'))); 

在從方法需要一個第一個參數,表格名,和一個第二個參數,列的陣列來獲取。如果你使用表達式,你可以指定一個'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的實例。

0
$select = $db->select(); 

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

我剛剛遇到了同樣的問題,並發現了什麼錯誤

Zend_Db_Select::columns職能期待一個數組,而不是一個對象或字符串(當第一個參數是一個字符串或對象時,它可能會使用這個作爲你給的列的主表,但林不知道這一點。)。

改變你的代碼

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

將解決您的問題