2010-04-15 159 views
3

如何呼應價值我創建了Zend框架,在我嘗試檢索列的總和的查詢,在這種情況下,列名爲「時間」。這是我使用的查詢:Zend框架SUM查詢

$this->timequery = $this->db_tasks->fetchAll($this->db_tasks->select()->from('tasks', 'SUM(time)')->where('projectnumber =' . $this->value_project)); 


$this->view->sumtime = $this->timequery; 

回聲查詢告訴我這是正確的。但我無法正確迴應結果。目前我使用:

echo $this->sumtime['SUM(time)']; 

返回以下錯誤:

Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\xampp\htdocs\BManagement\application\views\scripts\tasks\index.phtml on line 46 

線46是與在我看來回聲線。

我一直對如何算出這個,或者以不同的方式達到同樣的效果目前正在尋找兩天。試圖序列化的價值,但也沒有奏效。

是否有別人誰知道如何實現數據庫列的總和?

任何幫助是極大的appriciated!

注:很新的Zend框架...

回答

9

Zend_Db的有一些不錯的實用方法,如使用fetchall(您正在使用的)來獲取不同類型的數據:

  • 使用fetchall - 爲一組行
  • fetchRow的 - 爲單行
  • fetchOne - 單個細胞

最簡單的:

$sum = $db->fetchOne('SELECT SUM(time) FROM tasks WHERE project_number = ?', $this->value_project); 

你可以在你的問題與這些方法使用Zend_Db_Select對象太多,如:

//note that the SUM(time) part is passed as a Zend_Db expression, as it is not a column 
$select = $this->db_tasks->select() 
         ->from('tasks', new Zend_Db_Expr('SUM(time)')) 
         ->where('projectnumber =' . $this->value_project); 

$this->timequery = $this->db_tasks->fetchOne($select); 

這工作,因爲Zend_Db_Select對象對象實現了一個toString方法,生產SQL。

+0

嗨大衛, 一切都歸功於首先!但我仍然得到一個錯誤bacK: 致命錯誤:調用未定義的方法Application_Model_DbTable_Tasks :: fetchOne() 這是否意味着它無法在類中找到fetchOne? 改變它fetchRow使用fetchall再次給了它不能轉換爲字符串錯誤。 幾乎在那裏! – 2010-04-22 08:25:43

+1

如果想出來: 最後一句必須是: $ this-> view-> timequery = $ this-> db_tasks-> getAdapter() - > fetchOne($ select); 非常感謝! – 2010-04-22 08:33:22

+0

啊 - 我以爲$ this-> db_tasks是一個數據庫適配器,而不是Zend_Db_Table。你有getAdapter的正確解決方案 – 2010-04-22 09:30:31

0

你想要的SQL大概是:

SELECT SUM(time) AS time_sum FROM tasks ... 

不知道如何在Zend的做到這一點。然後:

echo $this->sumtime['time_sum']; 
+0

已經嘗試過,但我仍然得到相同的錯誤。我猜查詢是好的,但我沒有以適當的方式呼應結果回來... – 2010-04-15 12:16:14

1
$timequery= $timequeriestb->select(Zend_Db_Table::SELECT_WITH_FROM_PART) 
          ->columns('SUM(time) AS Totaltime') 
          ->where('projectnumber ='. $this->value_project));