2013-03-15 60 views
0

我需要在變量中獲得平均得分。我使用Zend和我都試過兩個查詢和他們都不工作:如何在Zend中獲取查詢的結果

$avg_query = $db->query("SELECT sid, AVG(score) 
         FROM markstable GROUP BY sid"); 

$avg_query = $db->query("SELECT sid, AVG(score) 
         FROM markstable WHERE sid = '$sid'"); 

$avg_score = $db->fetchAll($avg_query); 
echo $avg_score; gives nothing 
echo $avg_score['$sid']; gives nothing 

我需要將avg_score存儲在其它表。

+0

您正在使用哪個Zend? Zf1或Zf2? – chim 2013-03-15 08:59:21

回答

3

您可以使用此獲取由SID平均分組刪除引號。

$avg_score = $db->fetchAll("SELECT sid,AVG(score) FROM st GROUP BY sid"); 

foreach($avg_score as $row) { 
    echo $row["sid"]." ".$row["AVG(score)"]; 
} 

在第二個查詢的情況下:

$avg_score = $db->fetchRow("SELECT sid,AVG(score) FROM st where sid=1"); 
echo $avg_score["AVG(score)"]; 
+1

第二個例子中應該有一個等號。由於我還沒有達到2k點,所以我不能編輯需要編輯<6個字符的帖子。這有點荒謬。 – 2013-12-30 08:53:19

+0

謝謝。編輯。 – Angel 2017-04-12 01:22:39

+0

遲到比我猜想的更晚:') – 2017-04-21 16:06:22

0

你在你試圖查詢數據庫混合語法。

query()方法構建並執行所需的查詢。你的第一個查詢應該返回結果,無需提供任何進一步的代碼:

$avg_query = $db->query("SELECT sid, AVG(score) FROM markstable GROUP BY sid"); 
Zend_debug::dump($avg_query);//same as var_dump but already includes <pre> tags 

你的第二個查詢需要包括數組作爲第二個參數的任何約束值:

$avg_query = $db->query("SELECT sid, AVG(score) FROM markstable WHERE sid = ?", array($sid); 
Zend_debug::dump($avg_query);//same as var_dump but already includes <pre> tags 

你也可以使用標準的獲取方法執行這個查詢,只是在SQL作爲一個字符串傳遞:

你不妨習慣於
$avg_score = $db->fetchAll("SELECT sid, AVG(score) FROM markstable GROUP BY sid"); 
Zend_debug::dump($avg_score);//same as var_dump but already includes <pre> tags 
Zend_Db組件打交道時

噸o在查詢中使用佔位符(?),因爲舊式樣語法在許多組件中已被棄用。

這可能不是你正在做的最好的解決方案。但它確實回答你的問題。在Zend Framework中有大量的方式與數據庫進行交互,並且使用組件和方法通常不是完成任務的最佳方式。