所以我在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重新编写该部分(投票)。我尝试使用addEXpression('AVG(投票)'),但它没有按预期工作,我得到了所有条目的平均值,而不仅仅是那些具有相同ID的条目。
感谢。
答案 0 :(得分:2)
似乎你忘记了使用
$query->groupBy('wpv.nid');
这就是为什么你得到所有记录的AVG。
答案 1 :(得分: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();
我不确定按$别名排序,但理论上,它应该有用。