Jak usunąć duplikaty podczas sortowania losowego?

31

Utworzyłem widok, w którym wyświetlam tytuł węzła i logo (pole cck). W argumentach podałem nazwę terminu taksonomia.

W rezultacie węzeł wyświetla się 2 lub 3 razy; Już zaznaczyłem wyraźne pole wyboru w ustawieniach zapytania, ale to również nie działa. Użyłem sortowania losowego, który wydaje się powodować duplikaty; kiedy usuwam sortowanie losowe, działa dobrze.

Jak mogę uniknąć duplikatów bez wyłączania sortowania losowego?

Ahmad
źródło
byłoby naprawdę miło, gdyby ktoś wyjaśnił powód (powody) duplikatów i środki zaradcze. posiadanie 5 rozwiązań, które „być może” są tylko częściowo optymalne
3

Odpowiedzi:

19

Możesz zastosować GROUP BY lub DISTINCT, włączając ustawienia agregacji widoków, aby usunąć duplikaty rekordów.
1. Przejdź i edytuj widok
2. W sekcji Zaawansowane »INNE , włączając opcję Użyj agregacji: Tak
3. W sekcji POLA lub KRYTERIA FILTRA wybierz i zastosuj ustawienia agregacji, dla których pól chcesz pogrupować lub wyróżnić.

Sithu
źródło
2
Mam przykładowy problem, włączam agregację użytkowania i w moim polu nie ma distinctwyboru, który typ powinienem wybrać w typie agregacji?
Yusef
39

Prostym sposobem na uzyskanie odrębnych wartości w widoku jest wykonanie następujących czynności:

  1. Idź i edytuj swój widok
  2. W sekcji Zaawansowane »INNE kliknij„ Ustawienie zapytania ”
  3. Zaznacz pole wyboru „Wyraźny”.
Eugene Fidelin
źródło
W moim pytaniu wspomniałem już, że zaznaczyłem opcję Wyraźny w ustawieniach Zapytania.
Ahmad
Eugene i Clive, To praca, wielkie dzięki za udostępnienie tego.
8

Prostym sposobem na osiągnięcie odrębnych wartości za pomocą Widoku jest wykonanie następujących czynności:

  1. Idź i edytuj swój widok
  2. W sekcji Zaawansowane »INNE kliknij„ Ustawienie zapytania ”
  3. Zaznacz pole wyboru „Wyraźny”.

Możesz zastosować GROUP BY lub DISTINCT, włączając ustawienia agregacji widoków, aby usunąć duplikaty rekordów.

  1. Idź i edytuj swój widok
  2. W sekcji Zaawansowane »INNE, włączając opcję Użyj agregacji: Tak
  3. W sekcji POLA lub KRYTERIA FILTRA wybierz i zastosuj ustawienia agregacji, dla których pól chcesz pogrupować lub wyróżnić.
bez nazwy
źródło
5

Wiem, że na to pytanie już udzielono odpowiedzi, ale w przypadku niektórych zastosowań te rozwiązania nie działają. Jednak po przeprowadzeniu badań znalazłem rozwiązanie, które działa na moje potrzeby.

Znalazłem naprawdę przydatne obejście, które pozwoliło mi to naprawić. Opublikowałem fragment kodu w DropBucket. Zasadniczo implementujesz modyfikator zapytań Drupal 7, który sprawdza wszystkie zapytania widoków pod kątem komentarzy zapytań określających klauzulę i pole grupowania. Następnie dodaje tę grupę według zapytania 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

Źródło znajduje się w komentarzach na stronie.

Patrick
źródło
Chcę dodać, że znane są problemy z nieprawidłowym funkcjonowaniem DISTINCT w widokach 3.3 i wyższych.
Patrick
1
Zamiast robić powyższe, możesz po prostu sprawdzić nazwę widoku, a następnie dodać grupę według.
Potney Switters
Działa świetnie. Żadne z rozwiązań tutaj nie działało dla mnie, z wyjątkiem tego ... kodowanie zawsze jest rockowe, aby znaleźć ostateczne rozwiązanie :)
RajeevK
4

Miałem ten sam problem. Ostatecznie rozwiązałem go, instalując moduł Views Distinct .

Relacje lub inne łączenia w widokach często tworzą „duplikaty” wyników. Na przykład węzeł z polem o wielu wartościach może pojawiać się w Widoku raz na wartość w polu o wielu wartościach. Jest to frustrujące, a opcja zapytania SQL „DISTINCT” w interfejsie użytkownika Views nie rozwiązuje problemu, ponieważ wiersz wyników jest technicznie odrębny. Widoki Distinct mają na celu zapewnienie prostej metody GUI do usuwania lub agregowania tych „zduplikowanych” wierszy.

雨滴 米
źródło
0

Miał problemy z polami daty o wielu wartościach. Elementy były wyświetlane tak często, jak wprowadzono datę. Żadne z wymienionych tutaj rozwiązań nie działało dla mnie. Ale potem znalazłem rozwiązanie D6, że nadal pracuje w D7 tam .

hook_views_pre_render(&$view)to magiczne słowo. W tym przykładzie jest ograniczony do jednego określonego wyświetlania tylko jednego określonego widoku. Mam nadzieję, że to pomoże.

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

EDYCJA: Niestety ta odejmuje liczbę zduplikowanych elementów od widoku, jeśli został ustawiony limit. Jeśli ktoś może znaleźć rozwiązanie tego problemu, proszę o komentarz!

leymannx
źródło
0

Nie budzić starego wątku, ale odpowiedzią (jeśli używasz Drupala 7 i odsłoniętego filtra wyszukiwania) jest zaznaczenie „usuń wynik wyszukiwania” w „szukaj: wyszukiwane hasła”.

W sekcji „Filtruj kryteria”

Dodaj „Szukaj: Wyszukiwane hasła”

Zaznacz „Usuń wynik wyszukiwania”

Kliknij „Zastosuj (wszystkie ekrany)”

Kliknij Zapisz

Bryan
źródło
0

Żadna z tych innych metod nie działała dla mnie, ale moduł Views Random Seed faktycznie zadziałał . Chociaż moje problemy były bardziej związane z używaniem pagera. Oto cytat ze strony projektu tego modułu:

Dodaje losowy moduł obsługi zamówień z ziarnem. Jeśli w funkcji sql RAND () podano stały argument N całkowitej liczby, jest on używany jako wartość początkowa, która tworzy powtarzalną sekwencję wartości kolumn. Umożliwia to stronicowanie i brak wyświetlania elementów dwukrotnie. Możliwe jest również obliczenie niestandardowego ziarna za pomocą PHP, co pozwala na tworzenie liczb pseudolosowych na podstawie zmiennych, takich jak data dnia.

Mike Pfeiffer
źródło
0

Mam wiele Date fieldsi chcę sortować na początku FIRST date... Oto jak to działało: WViews->advanced->Other: use aggregation: YES A potem: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Spodziewałem countsię podać numer zamiast instancji, ale wynik był wyraźny ...

Amadeusz
źródło