Como faço para remover duplicatas ao usar a classificação aleatória?

31

Eu criei uma visão em que estou exibindo o título do nó e um logotipo (um campo cck). Nos argumentos, passei o nome do termo de taxonomia.

No resultado, um nó está exibindo 2 ou 3 vezes; Eu já marquei a caixa de seleção distinta nas configurações de consulta, mas isso também não funciona. Eu usei a classificação aleatória, que parece causar as duplicatas; quando eu removo a classificação aleatória, funciona bem.

Como evitar as duplicatas sem desativar a classificação aleatória?

Ahmad
fonte
seria realmente bom se alguém explicasse o (s) motivo (s) das duplicatas e das contramedidas. ter 5 soluções que 'talvez' funcionem é apenas semi-ideal
n3rd 24/01

Respostas:

19

Você pode aplicar GROUP BY ou DISTINCT, ativando as configurações de agregação de visualizações para remover registros duplicados.
1. Vá e edite sua visualização
2. Na seção Avançado »OUTROS , habilitando Usar agregação: Sim
3. Na seção FIELDS ou FILTER CRITERIA , selecione e aplique as configurações de Agregação para os campos que você deseja agrupar ou distintos.

Sithu
fonte
2
Eu tenho o problema de amostra, habilito o uso de agregação e, no meu arquivo, não há nenhum distincttipo de seleção, que tipo devo selecionar no tipo de agregação?
Yusef
39

A maneira simples de obter valores distintos em uma exibição é fazer o seguinte:

  1. Vá e edite sua visualização
  2. Na seção Avançado »OTHER, clique em" Configuração da consulta "
  3. Marque a caixa de seleção "Distinto".
Eugene Fidelin
fonte
Na minha pergunta, eu já mencionei que marquei a opção Distinto nas configurações de consulta.
Ahmad
Eugene e Clive, é trabalho, muito obrigado por compartilhar isso.
8

A maneira simples de obter valores distintos usando o Views é fazer o seguinte:

  1. Vá e edite sua visualização
  2. Na seção Avançado »OTHER, clique em" Configuração da consulta "
  3. Marque a caixa de seleção "Distinto".

Você pode aplicar GROUP BY ou DISTINCT, ativando as configurações de agregação de visualizações para remover registros duplicados.

  1. Vá e edite sua visualização
  2. Na seção Avançado »OTHER, ativando Usar agregação: Sim
  3. Na seção FIELDS ou FILTER CRITERIA, selecione e aplique as configurações de agregação para os campos pelos quais deseja agrupar ou distintos.
sem nome
fonte
5

Sei que esta pergunta já foi respondida, mas para alguns usos essas soluções não funcionam. No entanto, depois de fazer algumas pesquisas, encontrei uma solução que funciona para minhas necessidades.

Encontrei uma solução realmente útil que me permitiu corrigir isso. Publiquei o snippet de código no DropBucket. Basicamente, você implementa um alter hook de consulta do Drupal 7 que verifica todas as consultas de exibições em busca de comentários de consulta que especificam uma cláusula e campo groupby. Em seguida, adiciona esse groupby à consulta 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

A referência de origem está nos comentários na página.

Patrick
fonte
Quero acrescentar que há problemas conhecidos com o DISTINCT que não estão funcionando corretamente no Views 3.3 e superior.
28413 Patrick
1
Em vez de fazer o acima, basta verificar o nome da visualização e adicionar o grupo por.
Potney Switters
Isso funciona muito bem. Nada a solução aqui funcionou para mim exceto este ... codificação sempre balançar para encontrar solução final :)
RajeevK
4

Eu tive o mesmo problema. Por fim, resolvi instalando o módulo Views Distinct .

Relacionamentos ou outras junções no Views geralmente criam resultados "duplicados". Por exemplo, um nó com um campo que possui vários valores pode aparecer na exibição uma vez por valor no campo de vários valores. É frustrante, e a opção de consulta SQL "DISTINCT" na interface do usuário do Views não resolve o problema porque a linha de resultado é tecnicamente distinta. O Views Distinct visa fornecer um método GUI simples para remover ou agregar essas linhas "duplicadas".

雨滴 米
fonte
0

Ocorreu um problema com os campos de data com vários valores. Os itens foram exibidos sempre que uma data foi inserida. Nenhuma das outras soluções mencionadas aqui funcionou para mim. Mas então eu encontrei uma solução D6 que ainda funciona no D7 .

hook_views_pre_render(&$view)é a palavra mágica. No exemplo, é limitado a apenas uma exibição de uma determinada exibição. Espero que ajude.

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

EDIT: Infelizmente este subtrai o número de itens duplicados da exibição se um limite foi definido. Se alguém encontrar uma solução para isso, comente!

leymannx
fonte
0

Para não ativar um tópico antigo, mas a resposta (se estiver usando o Drupal 7 e um filtro de pesquisa exposto) é marcar "remover pontuação da pesquisa" em "pesquisar: termos de pesquisa".

Em "Critérios de filtro"

Adicione "Pesquisa: Termos de pesquisa"

Marque "Remover pontuação da pesquisa"

Clique em "Aplicar (todos os monitores)"

Clique em Salvar

Bryan
fonte
0

Nenhum desses outros métodos funcionou para mim, mas o módulo Views Random Seed realmente fez o truque. No entanto, meus problemas estavam mais relacionados ao uso de um pager. Aqui está uma citação da página do projeto desse módulo:

Adiciona um manipulador de pedidos aleatório com semente. Se um argumento inteiro constante N for especificado na função sql RAND (), ele será usado como o valor inicial, que produzirá uma sequência repetível de valores da coluna. Isso torna possível ter paginação e não exibir itens duas vezes. Também é possível calcular uma semente personalizada usando PHP, permitindo criar números de pseudo-randoms com base em variáveis ​​como a data do dia.

Mike Pfeiffer
fonte
0

Eu tenho vários Date fieldse quero classificar pelo início do FIRST date... Aqui está como ele funcionou: Em Views->advanced->Other: use aggregation: YES E então: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Eu esperava countme dar o número em vez da instância, mas tornou o resultado distinto ...

Amadeus
fonte