如何在Zend中获取查询结果

时间:2013-03-15 08:52:15

标签: php mysql zend-framework average

我需要在变量中获得平均分数。我正在使用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存储在其他表中。

3 个答案:

答案 0 :(得分: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 :(得分:0)

尝试使用fetchPairs()而不是fetchAll()

编辑:Zend_Db确实有一个fetchPairs();

http://framework.zend.com/manual/1.12/en/zend.db.adapter.html#zend.db.adapter.select.fetchpairs

同时删除数组索引

中变量的引号
echo $avg_score[$sid];

答案 2 :(得分: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

您也可以使用标准的fetch方法执行此查询,只需将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组件时,您也可能习惯在查询中使用占位符(?),因为许多组件已弃用旧样式语法。

这可能不是您正在做的最佳解决方案。但它确实回答了你的问题。在Zend Framework中有相当多的方法与数据库交互,使用Zend_Db_Adapter组件和方法通常不是完成任务的最佳方法。