¿Cómo elimino duplicados cuando uso la ordenación aleatoria?

31

He creado una vista donde estoy mostrando el título del nodo y un logotipo (un campo cck). En los argumentos he pasado el nombre del término taxonomía.

En el resultado, un nodo se muestra 2 o 3 veces; Ya marqué la casilla de verificación distinta en la configuración de Consulta, pero eso tampoco funciona. He usado la ordenación aleatoria, que parece causar los duplicados; cuando elimino la ordenación aleatoria, funciona bien.

¿Cómo puedo evitar los duplicados sin deshabilitar la ordenación aleatoria?

Ahmad
fuente
Sería realmente bueno si alguien explica los motivos de los duplicados y las contramedidas. tener 5 soluciones que 'tal vez' funcionan es solo semi-óptimo
n3rd

Respuestas:

19

Puede aplicar GROUP BY o DISTINCT habilitando la configuración de agregación de vistas para eliminar registros duplicados.
1. Vaya y edite su vista
2. En la sección Avanzado »OTRO habilitando Usar agregación: Sí
3. En la sección CAMPOS o CRITERIOS DE FILTRO , seleccione y aplique la configuración de Agregación para los campos que desea agrupar o distinguir.

Sithu
fuente
2
Tengo el problema de muestra, habilito el uso de agregación y en mi archivo no hay distinctselección, ¿qué tipo debo seleccionar en Tipo de agregación?
Yusef
39

La manera simple de lograr valores distintos en una vista es hacer lo siguiente:

  1. Ve y edita tu vista
  2. En la sección Avanzado »OTROS, haga clic en" Configuración de consulta "
  3. Marque la casilla de verificación "Distinto".
Eugene Fidelin
fuente
En mi pregunta, ya he mencionado que he marcado la opción Distinto en la configuración de Consulta.
Ahmad
Eugene y Clive, es trabajo, muchas gracias por compartir esto.
8

La manera simple de lograr valores distintos usando Vistas es hacer lo siguiente:

  1. Ve y edita tu vista
  2. En la sección Avanzado »OTROS, haga clic en" Configuración de consulta "
  3. Marque la casilla de verificación "Distinto".

Puede aplicar GROUP BY o DISTINCT habilitando la configuración de agregación de vistas para eliminar registros duplicados.

  1. Ve y edita tu vista
  2. En la sección Avanzado »OTROS habilitando Usar agregación: Sí
  3. En la sección CAMPOS o CRITERIOS DE FILTRO, seleccione y aplique la configuración de Agregación para qué campos desea agrupar o distinguir.
sin nombre
fuente
5

Sé que esta pregunta ya ha sido respondida, pero para algunos usos, estas soluciones no funcionan. Sin embargo, después de investigar un poco, encontré una solución que funciona para mis necesidades.

Encontré una solución muy útil que me permitió solucionar esto. He publicado el fragmento de código en DropBucket. Básicamente, usted implementa un enlace alternativo de consulta de Drupal 7 que verifica todas las consultas de vistas en busca de comentarios de consulta que especifiquen una cláusula groupby y un campo. Luego agrega ese groupby a la 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

La referencia de la fuente está en los comentarios de la página.

Patricio
fuente
Quiero agregar que hay problemas conocidos con DISTINCT que no funciona correctamente en Vistas 3.3 y superior.
Patrick
1
En lugar de hacer lo anterior, puede verificar el nombre de la vista y luego agregar el grupo por.
Potney Switters
Funciona muy bien Ninguna de las soluciones aquí funcionó para mí, excepto esto ... la codificación siempre es
genial
4

Yo tuve el mismo problema. Finalmente lo resolví instalando el módulo Distinct de Vistas .

Las relaciones u otras uniones en Vistas a menudo crean resultados "duplicados". Por ejemplo, un nodo con un campo que tiene múltiples valores puede aparecer en la Vista una vez por valor en el campo de valores múltiples. Es frustrante, y la opción de consulta SQL "DISTINCT" en la IU de Vistas en realidad no resuelve el problema porque la fila de resultados es técnicamente distinta. Views Distinct tiene como objetivo proporcionar un método GUI simple para eliminar o agregar estas filas "duplicadas".

雨滴 米
fuente
0

Tuvo problemas con los campos de fecha de valor múltiple. Los elementos se mostraban tan a menudo como se ingresaba una fecha. Ninguna de las otras soluciones aquí mencionadas funcionó para mí. Pero luego encontré una solución D6 que todavía funciona en D7 allí .

hook_views_pre_render(&$view)Es la palabra mágica. En el ejemplo, se limita a una visualización determinada de una vista determinada solamente. Espero eso ayude.

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

EDITAR: Desafortunadamente, este resta la cantidad de elementos duplicados de la vista si se estableció un límite. Si alguien tal vez encuentra una solución para esto, ¡por favor comente!

leymannx
fuente
0

No para despertar un hilo antiguo, pero la respuesta (si usa Drupal 7 y un filtro de búsqueda expuesto) es marcar "eliminar puntaje de búsqueda" en "buscar: términos de búsqueda".

En "Criterios de filtro"

Agregue "Buscar: Términos de búsqueda"

Marque "Eliminar puntaje de búsqueda"

Haga clic en "Aplicar (todas las pantallas)"

Clic en Guardar

Bryan
fuente
0

Ninguno de estos otros métodos funcionó para mí, pero el módulo Views Random Seed realmente funcionó. Sin embargo, mis problemas estaban más relacionados con el uso de un buscapersonas. Aquí hay una cita de la página del proyecto de ese módulo:

Agrega un manejador de orden aleatorio con semilla. Si se especifica un argumento entero constante N en la función sql RAND (), se usa como el valor inicial, que produce una secuencia repetible de valores de columna. Esto hace posible tener paginación y no mostrar elementos dos veces. También es posible calcular una semilla personalizada utilizando PHP, lo que le permite crear números de pseudo randoms basados ​​en variables como la fecha del día.

Mike Pfeiffer
fuente
0

Tengo múltiples Date fieldsy quiero ordenar por el inicio de FIRST date... Así es como funcionó: en Views->advanced->Other: use aggregation: YES y luego: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Esperaba countdarme el número en lugar de la instancia, pero hizo que el resultado fuera distinto ...

Amadeo
fuente