무작위 정렬을 사용할 때 중복을 어떻게 제거합니까?


31

노드 제목과 로고 (cck 필드)를 표시하는 뷰를 만들었습니다. 논쟁에서 나는 분류 용어 이름을 전달했습니다.

결과적으로 노드는 두세 번 표시됩니다. 쿼리 설정에서 고유 확인란을 이미 선택했지만 작동하지 않습니다. 나는 무작위 정렬을 사용했는데, 이는 중복을 일으키는 것으로 보인다. 무작위 정렬을 제거하면 정상적으로 작동합니다.

무작위 정렬을 비활성화하지 않고 어떻게 중복을 피할 수 있습니까?


누군가가 중복의 원인과 대책을 설명하면 실제로 좋을 것입니다. '아마도'효과가있는 5 가지 솔루션을 보유하는 것은 단지 반 최적입니다
n3rd

답변:


19

뷰 집계 설정을 사용하여 중복 레코드를 제거하여 GROUP BY 또는 DISTINCT를 적용 할 수 있습니다.
1.보기로 이동하고 편집하십시오
. 2. 집계 사용 : 예를 선택 하여 고급»기타 섹션 에서 필드 또는 필터 기준 섹션에서 그룹화하거나 구별 할 필드에 대한 집계 설정 을 선택하고 적용하십시오 .


2
샘플 문제가 있으며 집계 사용을 활성화하고 파일에 distinct선택 유형 이 없습니다 . 집계 유형에서 어떤 유형을 선택해야합니까?
Yusef

39

뷰에서 고유 한 값을 얻는 간단한 방법은 다음과 같습니다.

  1. 가서보기 편집
  2. 고급»기타 섹션에서 "쿼리 설정"을 클릭하십시오.
  3. "고유"확인란을 선택하십시오.

내 질문에 이미 쿼리 설정에서 고유 옵션을 확인했다고 언급했습니다.
Ahmad

유진과 클라이브, 일입니다. 이것을 공유해 주셔서 감사합니다.

8

뷰를 사용하여 고유 한 값을 얻는 간단한 방법은 다음을 수행하는 것입니다.

  1. 가서보기 편집
  2. 고급»기타 섹션에서 "쿼리 설정"을 클릭하십시오.
  3. "고유"확인란을 선택하십시오.

뷰 집계 설정을 사용하여 중복 레코드를 제거하여 GROUP BY 또는 DISTINCT를 적용 할 수 있습니다.

  1. 가서보기 편집
  2. 고급 사용»기타 섹션에서 집계 사용을 활성화하여 : 예
  3. 필드 또는 필터 기준 섹션에서 그룹화하거나 구별 할 필드에 대한 집계 설정을 선택하고 적용하십시오.

5

나는이 질문에 이미 답변되었지만, 일부 솔루션의 경우 작동하지 않는다는 것을 알고 있습니다. 그러나 몇 가지 연구를 한 후 내 요구에 맞는 솔루션을 찾았습니다.

나는 이것을 고칠 수있는 정말 유용한 해결책을 찾았다. 코드 스 니펫을 DropBucket에 게시했습니다. 기본적으로 모든 뷰 쿼리에서 groupby 절과 필드를 지정하는 쿼리 주석을 검사하는 Drupal 7 쿼리 변경 후크를 구현합니다. 그런 다음 해당 그룹을 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 이상에서 제대로 작동하지 않는 알려진 문제가 있다고 덧붙이고 싶습니다.
Patrick

1
위의 작업을 수행하는 대신보기 이름을 확인한 다음 그룹을 추가하면됩니다.
Potney Switters

잘 작동합니다. 이 솔루션을 제외하고는 어떤 해결책도 없었습니다 ... 코딩은 항상 최종 솔루션을 찾기 위해 항상 흔들
립니다

4

나는 같은 문제가 있었다. 궁극적으로 Views Distinct 모듈 을 설치하여 해결했습니다 .

뷰의 관계 또는 다른 조인은 종종 "중복"결과를 생성합니다. 예를 들어, 여러 값을 가진 필드가있는 노드는 다중 값 필드의 값당 한 번보기에 표시 될 수 있습니다. 실망스럽고 뷰 UI의 "DISTINCT"SQL 쿼리 옵션은 결과 행이 기술적으로 다르기 때문에 실제로 문제를 해결하지 않습니다. 뷰 Distinct 는 이러한 "중복"행을 제거하거나 집계하는 간단한 GUI 방법을 제공하는 것을 목표로합니다.


0

다중 가치 날짜 필드에 문제가있었습니다. 날짜가 입력 될 때마다 항목이 표시되었습니다. 여기에 언급 된 다른 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 그러나 나는 여전히 D7에서 작동하는 D6 솔루션을 찾았 습니다 .

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 및 노출 된 검색 필터를 사용하는 경우 "search : search terms"에서 "검색 점수 제거"를 확인하십시오.

"필터 기준"에서

"검색 : 검색어"추가

"검색 점수 제거"확인

"적용 (모든 디스플레이)"을 클릭하십시오.

저장을 클릭하십시오


0

이 다른 방법 중 어느 것도 나를 위해 일한 것은 아니지만 Views Random Seed 모듈은 실제로 트릭을 수행했습니다. 그래도 내 문제는 호출기 사용과 관련이 있습니다. 다음은 해당 모듈의 프로젝트 페이지에서 인용 한 것입니다.

시드가 포함 된 임의 순서 처리기를 추가합니다. 상수 정수 인수 N이 sql RAND () 함수에 지정된 경우, 시드 값으로 사용되어 반복 가능한 열 값 시퀀스를 생성합니다. 이렇게하면 페이징이 발생하고 항목이 두 번 표시되지 않을 수 있습니다. PHP를 사용하여 커스텀 시드를 계산할 수있어 날짜와 같은 변수를 기반으로 의사 난수를 생성 할 수 있습니다.


0

여러 개가 Date fields있고 시작 부분을 기준으로 정렬하고 싶습니다 FIRST date... 작동 방법은 다음과 같습니다 Views->advanced->Other: use aggregation: YES . SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

나는 count인스턴스 대신 숫자를 줄 것으로 예상 했지만 결과가 뚜렷했습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.