0

変数の平均スコアを取得する必要があります。私はzendを使用していますが、2つのクエリを試しましたが、どれも機能していません。

$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)"];
}

2 番目のクエリの場合:

$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

DBにクエリを実行する際に構文を混在させました。

この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

2番目のクエリでは、2番目の引数として配列にバインドされた値を含める必要があります。

$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クエリ()でプレースホルダーを使用することに慣れているかもしれません。?

これはおそらくあなたがしていることに対する最善の解決策ではありません。しかし、それはあなたの質問に答えます。Zend Frameworkでデータベースを操作する方法はかなり多数あり、Zend_Db_Adapterコンポーネントとメソッドを使用することは、通常、タスクを実行するための最良の方法ではありません。

于 2013-03-16T09:15:22.953 に答える
0

fetchAll()の代わりにfetchPairs()を試してください

編集: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 に答える