2

だから私はDrupalにこのSQLコードを持っています:

$query = db_query('SELECT wpv.nid, n.title, AVG(vote) average FROM {wp_votes} wpv
    LEFT JOIN {node} n on wpv.nid = n.nid
    GROUP BY wpv.nid
    ORDER BY average DESC
    LIMIT 3');

正常に動作しますが、db_selectを使用して記述する必要があります。

$query2 = db_select('wp_votes','wpv');
$query2->join('node','n','wpv.nid = n.nid');
$query2->fields('wpv',array('nid','vote'));
$query2->fields('n',array('title'));
$rez = $query2->execute()->fetchAll();

私の問題は、平均投票数を取得する方法がわからないことです(投票数は1、2、または3です)。AVG(vote)でパーツを書き直すにはどうすればよいですか。addEXpression('AVG(vote)')を試してみましたが、期待どおりに機能しませんでした。同じIDを持つエントリだけでなく、すべてのエントリの平均を取得しました。

ありがとう。

4

2 に答える 2

2

AVG の場合、addExpression()と groupBy を使用する必要があり、次のようなものになります。

<?php
$query2 = db_select('wp_votes','wpv');
$query2->join('node','n','wpv.nid = n.nid');
$query2->fields('wpv',array('nid','vote'));
$query2->fields('n',array('title'));
$alias = $query2->addExpression('AVG(vote)', 'average');
$query2->groupBy('wpv.nid');
$query2->sortBy($alias, 'DESC');
$rez = $query2->execute()->fetchAll();

$alias による並べ替えについてはわかりませんが、理論的にはうまくいくはずです。

于 2012-04-11T16:36:48.993 に答える
2

使い忘れたようです $query->groupBy('wpv.nid');

これが、すべてのレコードの AVG を取得した理由です。

于 2012-04-11T13:06:51.990 に答える