ฉันจะลบรายการที่ซ้ำกันเมื่อใช้การเรียงลำดับแบบสุ่มได้อย่างไร


31

ฉันสร้างมุมมองที่ฉันแสดงชื่อโหนดและโลโก้ (ฟิลด์ cck) ในข้อโต้แย้งฉันได้ผ่านชื่อคำศัพท์อนุกรมวิธาน

ในผลลัพธ์โหนดแสดง 2 หรือ 3 ครั้ง; ฉันตรวจสอบช่องทำเครื่องหมายที่แตกต่างกันแล้วในการตั้งค่าแบบสอบถาม แต่ก็ไม่ได้ผล ฉันใช้การเรียงลำดับแบบสุ่มซึ่งดูเหมือนว่าจะทำให้เกิดการซ้ำซ้อน เมื่อฉันลบการเรียงลำดับแบบสุ่มจะทำงานได้ดี

ฉันจะหลีกเลี่ยงรายการที่ซ้ำกันโดยไม่ปิดใช้งานการเรียงลำดับแบบสุ่มได้อย่างไร


มันจะดีจริงถ้ามีคนอธิบายเหตุผลสำหรับรายการที่ซ้ำกันและมาตรการตอบโต้ มี 5 โซลูชั่นที่ทำงานแบบ 'บางที' เป็นแบบกึ่งดีที่สุด
n3rd

คำตอบ:


19

คุณสามารถใช้ GROUP BY หรือ DISTINCT โดยเปิดใช้งานการตั้งค่าการรวมมุมมองเพื่อลบระเบียนที่ซ้ำกัน
1. ไปและแก้ไขมุมมองของคุณ
2. ในขั้นสูง»ส่วนอื่น ๆโดยเปิดใช้งานการรวมใช้: ใช่
3. ในส่วนFIELDSหรือFILTER CRITERIAให้เลือกและใช้การตั้งค่าการรวมที่คุณต้องการจัดกลุ่มตามหรือแตกต่างกัน


2
ฉันมีปัญหาตัวอย่างฉันเปิดใช้งานการรวมและในไฟล์ที่ฉันdistinctเลือกไว้ไม่มีตัวเลือกฉันควรเลือกประเภทใดในประเภทการรวม
Yusef

39

วิธีง่ายๆในการบรรลุค่าที่แตกต่างในมุมมองคือการทำสิ่งต่อไปนี้:

  1. ไปและแก้ไขมุมมองของคุณ
  2. ในขั้นสูง»ส่วนอื่น ๆ คลิกที่ "การตั้งค่าแบบสอบถาม"
  3. ทำเครื่องหมายที่ช่อง "Distinct"

ในคำถามของฉันฉันได้กล่าวแล้วว่าฉันได้ตรวจสอบตัวเลือกที่แตกต่างในการตั้งค่าแบบสอบถาม
Ahmad

ยูจีนและคลีฟมันใช้งานได้ขอบคุณมากที่แบ่งปันสิ่งนี้

8

วิธีง่ายๆในการรับค่าที่แตกต่างโดยใช้ Views คือการทำสิ่งต่อไปนี้:

  1. ไปและแก้ไขมุมมองของคุณ
  2. ในขั้นสูง»ส่วนอื่น ๆ คลิกที่ "การตั้งค่าแบบสอบถาม"
  3. ทำเครื่องหมายที่ช่อง "Distinct"

คุณสามารถใช้ GROUP BY หรือ DISTINCT โดยเปิดใช้งานการตั้งค่าการรวมมุมมองเพื่อลบระเบียนที่ซ้ำกัน

  1. ไปและแก้ไขมุมมองของคุณ
  2. ในขั้นสูง»ส่วนอื่น ๆ โดยการเปิดใช้งานการรวม: ใช่
  3. ในส่วน FIELDS หรือ FILTER CRITERIA ให้เลือกและใช้การตั้งค่าการรวมสำหรับเขตข้อมูลที่คุณต้องการจัดกลุ่มตามหรือแตกต่างกัน

5

ฉันรู้ว่าคำถามนี้ได้รับคำตอบแล้ว แต่สำหรับการใช้งานบางอย่างโซลูชันเหล่านี้ใช้ไม่ได้ อย่างไรก็ตามหลังจากทำวิจัยฉันพบวิธีแก้ไขปัญหาที่ตรงกับความต้องการของฉัน

ฉันพบวิธีแก้ปัญหาที่มีประโยชน์จริง ๆ ซึ่งทำให้ฉันสามารถแก้ไขได้ ฉันโพสต์ข้อมูลโค้ดไว้ที่ DropBucket โดยทั่วไปคุณใช้คิวรี Drupal 7 แก้ไข hook ที่ตรวจสอบแบบสอบถามมุมมองทั้งหมดสำหรับความคิดเห็นแบบสอบถามที่ระบุ groupby clause และ field จากนั้นจะเพิ่ม groupby นั้นลงในเคียวรี 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

แหล่งอ้างอิงอยู่ในความคิดเห็นในหน้า


ฉันต้องการเพิ่มว่ามีปัญหาที่ทราบแล้วเกี่ยวกับ DISTINCT ที่ทำงานไม่ถูกต้องใน Views 3.3 และสูงกว่า
Patrick

1
แทนที่จะทำตามด้านบนคุณสามารถตรวจสอบชื่อของมุมมองแล้วเพิ่มกลุ่มโดย
Potney Switters

มันใช้งานได้ดี ไม่มีของการแก้ปัญหาที่นี่ทำงานให้ฉันยกเว้นนี้ ... การเข้ารหัสเสมอร็อคที่จะหาทางออกสุดท้าย :)
RajeevK

4

ผมมีปัญหาเหมือนกัน. ในที่สุดฉันก็แก้ไขมันได้โดยการติดตั้งโมดูลViews Distinct

ความสัมพันธ์หรือการเข้าร่วมอื่น ๆ ใน Views มักจะสร้างผลลัพธ์ที่ "ซ้ำกัน" ตัวอย่างเช่นโหนดที่มีเขตข้อมูลที่มีหลายค่าอาจปรากฏขึ้นในมุมมองหนึ่งครั้งต่อค่าในเขตข้อมูลแบบหลายค่า มันน่าผิดหวังและตัวเลือกการสืบค้น SQL "DISTINCT" ใน UI ของวิวไม่ได้แก้ปัญหาได้จริงเนื่องจากแถวผลลัพธ์นั้นแตกต่างทางเทคนิค Views Distinctมีจุดประสงค์เพื่อให้วิธี GUI อย่างง่ายในการลบหรือรวมแถว "ซ้ำ" เหล่านี้


0

มีปัญหากับเขตข้อมูลวันที่มีค่าหลายค่า รายการถูกแสดงบ่อยครั้งเท่าที่ป้อนวันที่ ไม่มีวิธีการแก้ปัญหาที่กล่าวถึงอื่น ๆ ที่นี่สำหรับฉัน แต่แล้วผมพบว่าวิธีการแก้ปัญหา D6 ที่ยังคงทำงานใน D7 มี

hook_views_pre_render(&$view)เป็นคำวิเศษ ในตัวอย่างจะ จำกัด การแสดงผลหนึ่งมุมมองจากมุมมองหนึ่งเท่านั้น หวังว่ามันจะช่วย

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

แก้ไข:น่าเสียดายที่อันนี้ลบจำนวนรายการที่ซ้ำกันออกจากมุมมองหากมีการตั้งค่าขีด จำกัด หากใครบางคนอาจจะหาทางแก้ปัญหานี้


0

ไม่ต้องปลุกกระทู้เก่า แต่คำตอบ (ถ้าใช้ Drupal 7 และตัวกรองการค้นหาแบบเปิดเผย) คือทำเครื่องหมายที่ "ลบคะแนนการค้นหา" ใน "การค้นหา: คำค้นหา"

ภายใต้ "เกณฑ์การกรอง"

เพิ่ม "ค้นหา: คำค้นหา"

ทำเครื่องหมาย "ลบคะแนนการค้นหา"

คลิก "ใช้ (แสดงทั้งหมด)"

คลิกบันทึก


0

ไม่มีวิธีการอื่นใดที่เหมาะกับฉัน แต่การดูโมดูลการสุ่มเมล็ดพันธุ์ทำได้จริง แม้ว่าปัญหาของฉันเกี่ยวข้องกับการใช้เพจเจอร์ นี่คือคำพูดจากหน้าโครงการของโมดูล:

เพิ่มตัวจัดการคำสั่งสุ่มด้วยเมล็ด หากอาร์กิวเมนต์จำนวนเต็มคงที่ N ถูกระบุในฟังก์ชัน sql RAND () มันจะใช้เป็นค่าเมล็ดซึ่งสร้างลำดับของค่าคอลัมน์ซ้ำได้ สิ่งนี้ทำให้เป็นไปได้ที่จะมีเพจจิ้งและไม่มีรายการปรากฏขึ้นสองครั้ง นอกจากนี้ยังเป็นไปได้ที่จะคำนวณเมล็ดพันธุ์ที่กำหนดเองโดยใช้ PHP ช่วยให้คุณสามารถสร้างหมายเลขแรนด์หลอกโดยใช้ตัวแปรเช่นวันที่ของวัน


0

ฉันมีหลายรายการDate fieldsและต้องการจัดเรียงตามจุดเริ่มต้นของFIRST date... นี่คือวิธีการทำงาน: ในViews->advanced->Other: use aggregation: YES แล้ว: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

ฉันคาดว่าcountจะให้หมายเลขแทนตัวอย่าง แต่มันทำให้ผลลัพธ์ชัดเจน ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.