Убираем дубликаты из views

В некоторых случаях при построении views мы получаем дублирующиеся результаты. Это возможно, когда у нас в материале присутствует поле типа date и оно имеет множественное значение или у материала есть другие поля подобного рода. Посмотрим, как с этим бороться.

Если в настройках запроса views в раздел Прочее -> Настройки запроса (Query settings) мы уже попробовали поставить галочку «Уникальность» и это не помогло, то наш вариант — создать свой модуль, решающий эту проблему. Для начала в поле Query Comment вписываем groupby:node.nid — это значит, что группировать мы будем по колонке nid таблицы node. Если требуется группировать по другому полю, то впишите свое по аналогии, например, groupby:file_managed_file_usage.fid

а потом создаем модуль вот с таким содержанием

  1. function mymodule_query_alter(QueryAlterableInterface $query) {
  2.   if ($query->hasTag('views')) {
  3.     static $count;
  4.     $view = $query->getMetaData('view');
  5.  
  6.     if (strstr($groupby = $view->query->options['query_comment'], 'groupby')) {
  7.       list($action, $field) = explode(':', $groupby);
  8.  
  9.       if (strlen($field) > 0) {
  10.         $query->groupBy($field);
  11.       }
  12.     }
  13.   }
  14. }

Вместо mymodule, естественно вписываете свое название, подключаете модуль и смотрите результат.

Для тех, кто не хочет заморачиваться с написанием своих модулей, есть готовое решение views_distinct с неплохим функционалом