Как добавить предложение DISTINCT, GROUP BY в представление drupal - PullRequest
1 голос
/ 25 октября 2011

Я использую drupal 6, и я создал представление, и в запросе представления я хочу добавить

ГРУППА ПО И ОТЛИЧНОЕ ОБЪЕДИНЕНИЕ.

Для этого я попытался использовать views_groupby предоставленный модуль, но он предоставляет только COUNT Функция агрегации SQL.

Я не знаю, как добавить групповое предложение и отдельное предложение в запросе представления, используя hook_views_query_alter(&$view, &$query).

Чтобы это выглядело так -

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

Любая помощь или предложение будет принята с благодарностью.

Ответы [ 4 ]

1 голос
/ 01 июня 2013

Группировка по не работает с hook_views_query_alter и известна как проблема с модулем представления drupal.который сообщается в https://drupal.org/node/590534, http://drupal.org/node/1608742, http://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());
  }
}
1 голос
/ 25 октября 2011

В форме редактирования просмотра, в разделе Основные настройки , попробуйте включить настройку Отличительный .

Вы также можете попробовать использовать Значок шестеренки для раздела Стиль в разделе Основные настройки . Там вы можете указать поле для группировки, если ваш стиль строки - поля.

0 голосов
/ 11 октября 2017

В 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');
    }
  }
}
0 голосов
/ 23 января 2015
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');
  }
}
...