0

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

4

3 回答 3

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)"];
于 2013-03-15T09:11:33.780 回答
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];
于 2013-03-15T08:54:01.467 回答
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组件和方法通常不是完成任务的最佳方法。

于 2013-03-16T09:15:22.953 回答