Come rimuovo i duplicati quando utilizzo l'ordinamento casuale?


31

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?


sarebbe davvero bello se qualcuno spiegasse i motivi dei duplicati e delle contromisure. avere 5 soluzioni che "forse" funzionano è solo semi-ottimale
3

Risposte:


19

È 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 CAMPI o CRITERI DI FILTRO , seleziona e applica le impostazioni di aggregazione per i campi in cui vuoi raggruppare o distinguere.


2
Ho il problema di esempio, abilito l'uso dell'aggregazione e nel mio archivio non è distinctselezionato, quale tipo dovrei selezionare nel tipo di aggregazione?
Yusef,

39

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".

Nella mia domanda ho già menzionato che ho selezionato l'opzione Distinto nelle impostazioni della query.
Ahmad,

Eugene e Clive, è un lavoro, grazie mille per averlo condiviso.

8

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, selezionare e applicare le impostazioni di aggregazione per i quali campi si desidera raggruppare o distinguere.

5

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 hook di modifica query Drupal 7 che controlla tutte le query di visualizzazione per i commenti delle 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/153

Il riferimento alla fonte è nei commenti sulla pagina.


Voglio aggiungere che ci sono problemi noti con DISTINCT che non funziona correttamente in Views 3.3 e versioni successive.
Patrick,

1
Invece di fare quanto sopra puoi semplicemente controllare il nome della vista e quindi aggiungere il gruppo.
Potney Switters,

Funziona benissimo. Nessuna delle soluzioni qui ha funzionato per me tranne questo ... scrivere sempre rock per trovare la soluzione finale :)
RajeevK

4

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 multi-valore. È 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".


0

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

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

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 ordini 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ò consente di avere il paging e di 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

Ne ho molti Date fieldse voglio 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 countdi darmi il numero invece dell'istanza, ma ha reso il risultato distinto ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.