Як видалити дублікати при використанні випадкового сортування?


31

Я створив подання, де я відображаю назву вузла та логотип (поле cck). В аргументах я передав назву терміна таксономія.

В результаті вузол відображається 2 або 3 рази; Я вже встановив різний прапорець у налаштуваннях запиту, але це також не працює. Я використав випадковий сорт, який, здається, викликає дублікати; коли я видаляю випадковий сорт, він працює чудово.

Як я можу уникнути дублікатів без відключення випадкового сортування?


Було б насправді приємно, якби хтось пояснив причину (-ів) дублікатів та зустрічних заходів. маючи 5 рішень, які "можливо" працюють лише
напівептимально

Відповіді:


19

Ви можете застосувати GROUP BY або DISTINCT, включивши параметри агрегації представлень для видалення повторюваних записів.
1. Перейдіть і відредагуйте свій погляд
2. У розділі Додатково »ІНШИЙ , включивши Використовувати агрегацію: Так
3. У розділі« ПОЛА » або« КРИТЕРІЯ ФІЛЬТРА » виберіть та застосуйте параметри агрегації, за якими полями ви хочете згрупувати чи виділити .


2
У мене є проблема вибірки, я вмикаю використання агрегації, і в моєму файлі немає distinctвибору, який тип я повинен вибрати в типі агрегації?
Юсеф

39

Найпростіший спосіб досягти чітких значень у погляді:

  1. Перейдіть і відредагуйте свій погляд
  2. У розділі Додатково »ІНШЕ натисніть« Налаштування запиту »
  3. Установіть прапорець "Відмітний".

У своєму запитанні я вже згадував, що я перевірив параметр «Розрізнення» в налаштуваннях Запиту.
Ахмад

Євген та Клайв, це робота, дякую велике за те, що поділилися цим.

8

Найпростіший спосіб досягти чітких значень за допомогою Views - це виконати наступне:

  1. Перейдіть і відредагуйте свій погляд
  2. У розділі Додатково »ІНШЕ натисніть« Налаштування запиту »
  3. Установіть прапорець "Відмітний".

Ви можете застосувати GROUP BY або DISTINCT, включивши параметри агрегації представлень для видалення повторюваних записів.

  1. Перейдіть і відредагуйте свій погляд
  2. У розділі Додатково »ІНШІ, включивши Використовувати агрегацію: Так
  3. У розділі «ПОЛА» або «КРИТЕРІЯ ФІЛЬТРУ» виберіть та застосуйте параметри агрегації, за якими полями ви хочете згрупувати або виділити їх.

5

Я знаю, що на це питання вже відповіли, але для деяких із них ці рішення не працюють. Однак, провівши деякі дослідження, я знайшов рішення, яке працює для моїх потреб.

Я знайшов дійсно корисне рішення, яке дозволило мені виправити це. Я опублікував фрагмент коду в DropBucket. В основному ви реалізуєте гачок зміни альфа-запиту Drupal 7, яка перевіряє всі запити переглядів для коментарів запитів, які визначають застереження та поле groupby. Потім він додає цю групу за допомогою SQL-запиту.

/**
 *  Found this trick on theoleschool.com.
 *  
 *  Description: Allows the view developer to specify the query
 *  group by action in the query comments. Great way to force the
 *  removal of duplicates.
 *  
 *  Just go into your query comments and type in "groupby:" with
 *  that colon followed by the field you want to group by.
 * 
 *  Examples...
 *  groupby:node.nid
 *  groupby:file_managed_file_usage.fid
 * 
 *  Ref-Comment: http://theoleschool.com/comment/496#comment-496
 *  Ref-Article: http://theoleschool.com/blog/using-hookviewsalter-add-group-statement
 */
function mymodule_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('views')) {
    static $count;
    $view =& $query->getMetaData('view');

    if (strstr($groupby = $view->query->options['query_comment'], 'groupby')) {
      list($action, $field) = explode(':', $groupby);

      if (strlen($field) > 0) {
        $query->groupBy($field);
      }
    }
  }
}

http://dropbucket.org/node/153

Посилання на джерело - у коментарях на сторінці.


Хочу додати, що відомі проблеми з тим, що DISTINCT не працює належним чином у переглядах 3.3 і вище.
Патрік

1
Замість того, щоб робити вище, ви можете просто перевірити ім'я перегляду, а потім додати групу.
Potney Switters

Це чудово працює. Жодне рішення тут не працювало для мене, крім цього ... кодування завжди рок, щоб знайти остаточне рішення :)
RajeevK

4

У мене була така ж проблема. Зрештою я вирішив це, встановивши модуль Views Distinct .

Відносини або інші об'єднання в Поглядах часто створюють "повторювані" результати. Наприклад, вузол із полем, у якого є кілька значень, може відображатися у Перегляді один раз за значенням у полі багатозначного значення. Це засмучує, і параметр SQL-запиту "DISTINCT" в інтерфейсі Views фактично не вирішує проблему, оскільки рядок результатів технічно відрізняється. Views Distinct має на меті надати простий метод GUI для видалення або сукупності цих "дублікатів" рядків.


0

У вас виникли проблеми з полями, що мають багатозначні дати. Елементи відображалися так само часто, як вводилася дата. Жодне з інших тут згаданих рішень не працювало на мене. Але потім я знайшов рішення D6 , який все ще працює в D7 там .

hook_views_pre_render(&$view)це магічне слово. У прикладі він обмежений лише одним певним відображенням одного певного виду. Сподіваюся, це допомагає.

function MYMODULE_views_pre_render(&$view) {
  $used_nids = array();

  if ($view->name == 'events') {

    if ($view->current_display == 'page_2') {

      foreach ($view->result as $row) {

        if (!in_array($row->nid, $used_nids)) {

          $new_view_result[] = $row;
          $used_nids[] = $row->nid;
        }
      }
      $view->result = $new_view_result;
    }
  }
}

РЕДАКТУВАННЯ: На жаль, цей номер віднімає кількість повторюваних елементів з подання, якщо встановлено обмеження. Якщо хтось, можливо, знайде для цього рішення, будь ласка, прокоментуйте!


0

Не для того, щоб прокинути стару тему, але відповідь (якщо використовується Drupal 7 та відкритий фільтр пошуку) полягає у перевірці "видалити результати пошуку" у розділі "Пошук: пошукові терміни".

У розділі "Критерії фільтра"

Додати "Пошук: Пошукові умови"

Поставте прапорець "Видалити показник пошуку"

Натисніть "Застосувати (усі дисплеї)"

Клацніть Зберегти


0

Жоден з цих інших методів для мене не працював, але модуль Views Random Seed насправді зробив свою справу. Хоча мої проблеми більше стосувалися використання пейджера. Ось цитата зі сторінки проекту цього модуля:

Додає обробник випадкових замовлень із насінням. Якщо аргумент постійного цілого числа N вказаний у функції sql RAND (), він використовується як початкове значення, яке створює повторювану послідовність значень стовпців. Це дозволяє мати підкачку і не показувати елементи двічі. Також можливо обчислити користувацьке насіння за допомогою PHP, що дозволяє створювати номери псевдо randoms на основі змінних, таких як дата дня.


0

У мене декілька, Date fieldsі я хочу сортувати до початку FIRST date... Ось як це працювало: В Views->advanced->Other: use aggregation: YES А потім: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Я очікував, countщо мені дадуть число замість екземпляра, але це зробило результат виразним ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.