Drupal中的数据库查询

时间:2012-04-11 10:43:34

标签: sql database drupal select

所以我在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的条目。

感谢。

2 个答案:

答案 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();

我不确定按$别名排序,但理论上,它应该有用。