Sql Drupal中的数据库查询

Sql Drupal中的数据库查询,sql,database,drupal,select,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_selec

我在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的选票。 如何用AVGvote重写该部分。我尝试使用addEXpression'AVGvote',但没有达到预期效果,我得到了所有条目的平均值,而不仅仅是相同id的条目


谢谢。

你好像忘了用 $query->groupBy'wpv.nid';


这就是为什么您得到了所有记录的平均值。

似乎您忘记使用了 $query->groupBy'wpv.nid';

这就是为什么所有记录都有AVG的原因。

对于AVG,您需要使用和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排序,但从理论上讲,它应该可以工作。

对于AVG,您需要使用和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排序,但从理论上讲,它应该可以工作。

我想确保您了解,除非您动态构建查询,否则您应该始终使用db\U查询。有一个常见的误解是,您应该始终使用db_select,这根本不是事实。这会带来额外的开销。我想确保您理解,除非您动态构建查询,否则您应该始终使用db_查询。有一个常见的误解是,您应该始终使用db_select,这根本不是事实。这里面有额外的开销。谢谢。仍然需要groupBy,它是addExpresion'AVGvote','average';谢谢仍然需要groupBy,它是addExpresion'AVGvote','average';