我需要在变量中获得平均分数。我正在使用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 :(得分: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
组件和方法通常不是完成任务的最佳方法。