it-swarm.it

Come rimuovo i duplicati quando utilizzo l'ordinamento casuale?

Ho creato una vista in cui visualizzo il titolo del nodo e un logo (un campo cck). Negli argomenti ho passato il nome del termine tassonomia.

Nel risultato un nodo viene visualizzato 2 o 3 volte; Ho già selezionato la casella di controllo distinta nelle impostazioni della query, ma anche quella non funziona. Ho usato l'ordinamento casuale, che sembra causare i duplicati; quando rimuovo l'ordinamento casuale, funziona benissimo.

Come posso evitare i duplicati senza disabilitare l'ordinamento casuale?

30
Ahmad

È possibile applicare GROUP BY o DISTINCT abilitando le impostazioni di aggregazione delle viste per rimuovere i record duplicati.
1. Vai e modifica la vista
2. Nella sezione Avanzate "ALTRO abilitando sa aggregazione: Sì
3. Nella sezione o CRITERI DI FILTRO, seleziona e applica Impostazioni di aggregazione per quali campi vuoi raggruppare o distinto.

19
Sithu

Il modo semplice per ottenere valori distinti in una vista consiste nel fare quanto segue:

  1. Vai e modifica la vista
  2. Nella sezione Avanzate "ALTRO fai clic su" Impostazione query "
  3. Seleziona la casella di controllo "Distinto".
39
Eugene Fidelin

Il modo semplice per ottenere valori distinti utilizzando Views è effettuare le seguenti operazioni:

  1. Vai e modifica la vista
  2. Nella sezione Avanzate "ALTRO fai clic su" Impostazione query "
  3. Seleziona la casella di controllo "Distinto".

È possibile applicare GROUP BY o DISTINCT abilitando le impostazioni di aggregazione delle viste per rimuovere i record duplicati.

  1. Vai e modifica la vista
  2. Nella sezione Avanzate "ALTRO abilitando Usa aggregazione: Sì
  3. Nella sezione CRITERI DI CAMPO o FILTRO, seleziona e applica le impostazioni di aggregazione per i quali campi vuoi raggruppare o distinguere.
8
no name

So che a questa domanda è già stata data una risposta, ma per alcuni usi queste soluzioni non funzionano. Tuttavia, dopo aver fatto qualche ricerca, ho trovato una soluzione che funziona per le mie esigenze.

Ho trovato una soluzione davvero utile che mi ha permesso di risolvere questo problema. Ho pubblicato lo snippet di codice su DropBucket. Fondamentalmente si implementa un Drupal 7 query alter hook che controlla tutte le query viste per commenti query che specificano una clausola e un campo groupby. Quindi aggiunge quel groupby alla query 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/15

Il riferimento alla fonte è nei commenti sulla pagina.

5
Patrick

Ho avuto lo stesso problema. Alla fine l'ho risolto installando il modulo Views Distinct .

Le relazioni o altri join in Views spesso creano risultati "duplicati". Ad esempio, un nodo con un campo con più valori può essere visualizzato nella vista una volta per valore nel campo multivalore. È frustrante e l'opzione di query SQL "DISTINCT" nell'interfaccia utente di Views non risolve effettivamente il problema perché la riga dei risultati è tecnicamente distinta. Views Distinct mira a fornire un semplice metodo GUI per rimuovere o aggregare queste righe "duplicate".

4
雨滴米

Ho più Date fields e vuoi ordinare per l'inizio del FIRST date... Ecco come ha funzionato: In Views->advanced->Other: use aggregation: YES E poi: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Mi aspettavo che count mi fornisse il numero anziché l'istanza, ma ha reso il risultato distinto ...

0
Amadeus

Si sono verificati problemi con i campi data a più valori. Gli articoli venivano visualizzati tutte le volte che veniva inserita una data. Nessuna delle altre soluzioni qui menzionate ha funzionato per me. Ma poi ho trovato una soluzione D6 che funziona ancora in D7 .

hook_views_pre_render(&$view) è la Parola magica. Nell'esempio è limitato a una determinata visualizzazione di una determinata vista. Spero che sia d'aiuto.

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: Purtroppo questo sottrae il numero di elementi duplicati dalla vista se è stato impostato un limite. Se qualcuno forse trova una soluzione per questo, per favore commenta!

0
leymannx

Nessuno di questi altri metodi ha funzionato per me, ma il modulo Views Random Seed ha effettivamente funzionato. Tuttavia, i miei problemi erano più legati all'uso di un cercapersone. Ecco una citazione dalla pagina del progetto di quel modulo:

Aggiunge un gestore ordine casuale con seed. Se viene specificato un argomento intero costante N nella funzione sql Rand (), viene utilizzato come valore seed, che produce una sequenza ripetibile di valori di colonna. Ciò rende possibile avere il paging e non visualizzare gli elementi due volte. È anche possibile calcolare un seed personalizzato utilizzando PHP, che consente di creare numeri di pseudo randomi in base a variabili come la data del giorno.

0
Mike Pfeiffer

Non svegliare un vecchio thread, ma la risposta (se si utilizza Drupal 7 e un filtro di ricerca esposto) è selezionare "rimuovi il punteggio di ricerca" in "cerca: termini di ricerca".

In "Criteri di filtro"

Aggiungi "Cerca: Termini di ricerca"

Seleziona "Rimuovi punteggio di ricerca"

Fai clic su "Applica (tutti i display)"

Fai clic su Salva

0
Bryan