如何在drupal视图中添加DISTINCT,GROUP BY子句

时间:2011-10-25 11:04:33

标签: mysql sql drupal drupal-views aggregate-functions

我正在使用drupal 6并且我创建了一个视图并且在视图查询中我想要添加

GROUP BY AND DISTINCT CLAUSE。

为此,我尝试使用 views_groupby 贡献模块,但它只提供 COUNT SQL聚合功能。

我不知道如何使用hook_views_query_alter(&$view, &$query)在视图查询中添加group by子句和distinct子句。

所以它看起来像这样 -

SELECT DISTINCT(node.nid) AS nid, OTHER_COLUMN 
FROM TABLE_NAME 
JOIN ANOTHER_TABLE ON JOIN_CONDITION 
GROUP BY nid

非常感谢任何帮助或建议。

4 个答案:

答案 0 :(得分:1)

在您的查看修改表单的基本设置下,尝试启用不同设置。

您也可以尝试在基本设置下的样式部分使用齿轮图标。如果您的行样式是字段,则可以指定要分组的字段。

答案 1 :(得分:1)

分组依据不支持hook_views_query_alter,它被称为drupal views模块问题。报告位于https://drupal.org/node/590534http://drupal.org/node/1608742http://drupal.org/node/389230#comment-2637200

此外,还没有为聚合函数提供所需的结果,因为它会将所有字段和排序顺序字段添加到按条件分组。 因此,您应该使用其他钩子,例如 hook_query_alter

function hook_query_alter( &$query) {

  if($query->alterMetaData['view']->name == "your_views_name"){
     $query->groupBy("domain_source.domain_id");
     //also you can unset other group by critera by using, unset($query->getGroupBy());
  }
}

答案 2 :(得分:0)

function hook_views_query_alter(&$view, &$query) {
  if ($view->name == 'your_view_name') {
    $query->add_field('table', 'field', 'alias', array('function', groupby));
    $query->add_groupby('table.field');
  }
}

答案 3 :(得分:0)

在Drupal 8中,你将添加" Group by"那样:

use Drupal\Core\Database\Query\AlterableInterface;

function MYMODULE_query_alter(AlterableInterface $query) {
  if (isset($query->alterMetaData['view'])) {
    if($query->alterMetaData['view']->id() == 'replace_by_view_machine_name') {
      // Group by UID to remove duplicates from View results
      $query->groupBy('users_field_data.uid');
    }
  }
}