Bagaimana cara menghapus duplikat saat menggunakan pengurutan acak?

31

Saya telah membuat tampilan di mana saya menampilkan judul node dan logo (bidang cck). Dalam argumen saya telah melewati nama istilah taksonomi.

Dalam hasilnya sebuah node menampilkan 2 atau 3 kali; Saya sudah mencentang kotak centang berbeda di pengaturan Kueri tetapi itu juga tidak berfungsi. Saya telah menggunakan jenis acak, yang tampaknya menyebabkan duplikat; ketika saya menghapus jenis acak, itu berfungsi dengan baik.

Bagaimana saya bisa menghindari duplikat tanpa menonaktifkan pengurutan acak?

Ahmad
sumber
akan lebih baik jika seseorang menjelaskan alasan duplikat dan tindakan balasan. memiliki 5 solusi yang 'mungkin' berfungsi hanya semi-optimal
n3

Jawaban:

19

Anda dapat menerapkan GROUP BY atau DISTINCT dengan mengaktifkan pengaturan agregasi tampilan untuk menghapus rekaman duplikat.
1. Buka dan edit tampilan Anda
2. Di Tingkat Lanjut » bagian LAINNYA dengan mengaktifkan Gunakan agregasi: Ya
3. Di bagian BIDANG atau FILTER CRITERIA , pilih dan terapkan pengaturan Agregasi untuk bidang mana Anda ingin dikelompokkan atau berbeda.

Sithu
sumber
2
Saya memiliki masalah sampel, saya mengaktifkan agregasi penggunaan dan dalam arsip saya tidak ada distinctpilih, tipe mana yang harus saya pilih dalam tipe Agregasi?
Yusef
39

Cara sederhana untuk mencapai nilai berbeda dalam tampilan adalah dengan membuat yang berikut:

  1. Pergi dan edit tampilan Anda
  2. Di Tingkat Lanjut »bagian LAIN klik pada" Pengaturan kueri "
  3. Centang kotak "Distinct".
Eugene Fidelin
sumber
Dalam pertanyaan saya, saya telah menyebutkan bahwa saya telah memeriksa opsi Berbeda dalam pengaturan Kueri.
Ahmad
Eugene dan Clive, Ini bekerja, Terima kasih banyak untuk berbagi ini.
8

Cara sederhana untuk mencapai nilai yang berbeda menggunakan Tampilan adalah dengan melakukan hal berikut:

  1. Pergi dan edit tampilan Anda
  2. Di Tingkat Lanjut »bagian LAIN klik pada" Pengaturan kueri "
  3. Centang kotak "Distinct".

Anda dapat menerapkan GROUP BY atau DISTINCT dengan mengaktifkan pengaturan agregasi tampilan untuk menghapus rekaman duplikat.

  1. Pergi dan edit tampilan Anda
  2. Di Tingkat Lanjut »bagian LAINNYA dengan mengaktifkan Gunakan agregasi: Ya
  3. Di bagian BIDANG atau FILTER CRITERIA, pilih dan terapkan pengaturan Agregasi untuk bidang mana Anda ingin dikelompokkan berdasarkan atau berbeda.
tanpa nama
sumber
5

Saya tahu pertanyaan ini sudah dijawab, tetapi untuk beberapa penggunaan solusi ini tidak berfungsi. Namun, setelah melakukan riset, saya menemukan solusi yang sesuai dengan kebutuhan saya.

Saya menemukan solusi yang sangat berguna yang memungkinkan saya untuk memperbaikinya. Saya telah memposting cuplikan kode ke DropBucket. Pada dasarnya Anda menerapkan pengait perubahan Drupal 7 yang memeriksa semua kueri tampilan untuk komentar kueri yang menentukan grup dengan klausa dan bidang. Kemudian ia menambahkan groupby ke 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

Referensi sumber ada di komentar di halaman.

Patrick
sumber
Saya ingin menambahkan bahwa ada masalah yang diketahui dengan DISTINCT tidak berfungsi dengan benar di Tampilan 3.3 dan lebih tinggi.
Patrick
1
Alih-alih melakukan hal di atas, Anda cukup memeriksa nama tampilan dan kemudian menambahkan grup dengan.
Potney Switters
Ini bekerja dengan baik. Tidak ada solusi di sini yang bekerja untuk saya kecuali ini ... coding selalu rock untuk menemukan solusi akhir :)
RajeevK
4

Saya memiliki masalah yang sama. Akhirnya saya menyelesaikannya dengan menginstal modul Views Distinct .

Hubungan atau gabungan lainnya di Tampilan sering kali menghasilkan hasil "duplikat". Misalnya, node dengan bidang yang memiliki beberapa nilai dapat muncul di tampilan sekali per nilai di bidang multi-nilai. Ini membuat frustrasi, dan opsi "DISTINCT" SQL di UI Views sebenarnya tidak memecahkan masalah karena baris hasil secara teknis berbeda. Tampilan Berbeda bertujuan untuk memberikan metode GUI sederhana untuk menghapus atau mengagregasi baris "duplikat" ini.

雨滴 米
sumber
0

Punya masalah dengan bidang tanggal multi nilai. Item ditampilkan sesering tanggal dimasukkan. Tidak ada solusi lain yang disebutkan di sini yang berfungsi untuk saya. Tapi kemudian saya menemukan solusi D6 yang masih berfungsi di D7 di sana .

hook_views_pre_render(&$view)adalah kata ajaib. Dalam contoh ini terbatas pada satu tampilan tertentu dari satu tampilan tertentu saja. Semoga ini bisa membantu.

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: Sayangnya yang ini mengurangi jumlah item duplikat dari tampilan jika batas ditetapkan. Jika seseorang mungkin menemukan solusi untuk ini, silakan komentar!

leymannx
sumber
0

Bukan untuk membangunkan utas lama, tetapi jawabannya (jika menggunakan Drupal 7 dan filter pencarian terbuka) adalah untuk memeriksa "hapus skor pencarian" di bawah "search: search search terms".

Di bawah "Kriteria Filter"

Tambahkan "Cari: Istilah Pencarian"

Centang "Hapus Skor Pencarian"

Klik "Terapkan (semua tampilan)"

Klik Simpan

Bryan
sumber
0

Tidak satu pun dari metode lain ini yang bekerja untuk saya, tetapi modul Views Random Seed benar-benar berhasil. Padahal, masalah saya lebih terkait dengan menggunakan pager. Berikut adalah kutipan dari halaman proyek modul itu:

Menambahkan penangan pesanan acak dengan seed. Jika argumen integer konstan N dispesifikasikan dalam fungsi sql RAND (), ia digunakan sebagai nilai seed, yang menghasilkan urutan berulang nilai kolom. Ini memungkinkan paging dan item tidak muncul dua kali. Dimungkinkan juga untuk menghitung seed kustom menggunakan PHP, memungkinkan Anda untuk membuat angka pseudo randoms berdasarkan variabel seperti tanggal hari itu.

Mike Pfeiffer
sumber
0

Saya memiliki banyak Date fieldsdan ingin mengurutkan pada awal FIRST date... Berikut adalah cara kerjanya: Di Views->advanced->Other: use aggregation: YES Dan kemudian: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

Saya berharap countmemberi saya nomor alih-alih instance, tapi itu membuat hasilnya berbeda ...

Amadeus
sumber