【问题标题】:How to add DISTINCT, GROUP BY clause in drupal view如何在 Drupal 视图中添加 DISTINCT、GROUP BY 子句
【发布时间】:2011-10-25 11:04:33
【问题描述】:

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

GROUP BY AND DISTINCT 子句。

为此,我尝试使用 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

任何帮助或建议将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    Group By 不适用于 hook_views_query_alter,它被称为 drupal 视图模块问题。报告于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());
      }
    }
    

    【讨论】:

    • @B Ravanbakhsh,此钩子仅在 drupal 7 及更高版本中可用。
    【解决方案2】:

    在您的视图编辑表单的基本设置下,尝试开启Distinct设置。

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

    【讨论】:

    • 在基本设置下使用样式部分仅根据您在分组字段下拉列表中放置的字段拆分分隔每一行的表格行。但它不会改变我在问题中提到的查询。顺便说一句,我需要按照您的建议检查 DISTINCT 设置。它现在看起来不错。我要检查一下。谢谢。
    • 默认情况下,它在 nid 上应用 group by 子句。你知道除了nid之外如何应用group by子句吗?
    • 我知道将 Group By 子句应用于 NID 以外的唯一方法是使用“基本设置 -> 样式 -> 设置:按字段分组”
    • 感谢您的回复。您的建议在我的要求中不起作用。正如我在第一条评论中提到的那样。但是你的回答对我帮助很大。所以我笑着接受它。
    • 谢谢。或者,您应该查看 hook_views_query_alter (views.doc.logrus.com)。有了它,您应该能够有一个自定义模块拦截并根据您的喜好重写查询。
    【解决方案3】:

    在 Drupal 8 中,您将通过这种方式添加“分组依据”:

    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');
        }
      }
    }
    

    【讨论】:

      【解决方案4】:
      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');
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多