it-swarm.asia

كيف يمكنني إزالة التكرارات عند استخدام الفرز العشوائي؟

لقد قمت بإنشاء طريقة عرض أقوم فيها بعرض عنوان العقدة وشعار (حقل cck). لقد مررت في الحجج اسم مصطلح التصنيف.

في النتيجة يتم عرض العقدة 2 أو 3 مرات ؛ لقد قمت بالفعل بتحديد خانة الاختيار المميزة في إعدادات الاستعلام ولكن هذا لا يعمل أيضًا. لقد استخدمت الفرز العشوائي ، الذي يبدو أنه يسبب التكرارات ؛ عندما أزيل الفرز العشوائي ، فإنه يعمل بشكل جيد.

كيف يمكنني تجنب التكرارات دون تعطيل الفرز العشوائي؟

30
Ahmad

يمكنك تطبيق GROUP BY أو DISTINCT من خلال تمكين إعدادات تجميع المشاهدات لإزالة السجلات المكررة.
1. اذهب وتعديل طريقة العرض الخاصة بك
2. في متقدم "آخر القسم بتمكين استخدم التجميع: نعم
3. في الحقول أو FILTER CRITERIA القسم ، حدد وتطبيق إعدادات التجميع للحقول التي تريد تجميعها بها أو مميزة.

19
Sithu

إن الطريقة البسيطة لتحقيق القيم المميزة في طريقة العرض هي القيام بما يلي:

  1. اذهب وتعديل طريقة العرض الخاصة بك
  2. في متقدم "قسم آخر انقر على" إعداد الاستعلام "
  3. حدد خانة الاختيار "مميزة".
39
Eugene Fidelin

إن الطريقة البسيطة لتحقيق القيم المميزة باستخدام طرق العرض هي القيام بما يلي:

  1. اذهب وتعديل طريقة العرض الخاصة بك
  2. في متقدم "قسم آخر انقر على" إعداد الاستعلام "
  3. حدد خانة الاختيار "مميزة".

يمكنك تطبيق GROUP BY أو DISTINCT من خلال تمكين إعدادات تجميع المشاهدات لإزالة السجلات المكررة.

  1. اذهب وتعديل طريقة العرض الخاصة بك
  2. في القسم Advanced "OTHER بتمكين استخدام التجميع: نعم
  3. في FIELDS أو FILTER CRITERIA ، حدد وتطبيق إعدادات التجميع للحقول التي تريد تجميعها أو تمييزها.
8
no name

أعرف أن هذا السؤال قد تمت الإجابة عليه بالفعل ، ولكن لبعض هذه الاستخدامات لا تعمل هذه الحلول. ومع ذلك ، بعد إجراء بعض الأبحاث ، وجدت حلًا يناسب احتياجاتي.

لقد وجدت حلاً مفيدًا للغاية سمح لي بإصلاح هذا. لقد نشرت مقتطف الشفرة إلى DropBucket. بشكل أساسي ، تقوم بتطبيق Drupal 7 ربط تغيير الاستعلام الذي يتحقق من جميع استعلامات طرق العرض لتعليقات الاستعلام التي تحدد بند وحقل 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/15

مرجع المصدر موجود في التعليقات على الصفحة.

5
Patrick

كان لي نفس المشكلة. في النهاية قمت بحلها عن طريق تثبيت طرق عرض مميزة .

غالبًا ما تنتج العلاقات أو الصلات الأخرى في طرق العرض نتائج "مكررة". على سبيل المثال ، قد تظهر العقدة التي تحتوي على حقل يحتوي على قيم متعددة في العرض مرة واحدة لكل قيمة في الحقل متعدد القيم. إنه أمر محبط ، ولا يحل خيار استعلام SQL "DISTINCT" في واجهة مستخدم طرق العرض بالفعل المشكلة لأن صف النتيجة مميز من الناحية الفنية. تهدف طرق عرض Distinct إلى إعطاء أسلوب GUI بسيط لإزالة أو تجميع هذه الصفوف "المكررة".

4
雨滴米

لدي عدة Date fields وأريد الفرز حسب بداية FIRST date... إليك كيف عملت: في Views->advanced->Other: use aggregation: YES وثم: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

توقعت أن يعطيني count الرقم بدلاً من المثيل ، لكنه جعل النتيجة مميزة ...

0
Amadeus

واجهت مشاكل في حقول التاريخ متعددة القيم. تم عرض العناصر كلما تم إدخال التاريخ. لم يعمل أي من الحلول المذكورة هنا بالنسبة لي. ولكن بعد ذلك وجدت حل 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
leymannx

لم تنجح أي من هذه الطرق الأخرى بالنسبة لي ، ولكن آراء البذور العشوائية الوحدة في الواقع خدعت. على الرغم من أن مشكلاتي كانت أكثر ارتباطًا باستخدام جهاز النداء. هنا اقتباس من صفحة مشروع تلك الوحدة:

يضيف معالج ترتيب عشوائي مع البذور. إذا تم تحديد وسيطة عدد صحيح ثابت N في دالة sql Rand () ، يتم استخدامه كقيمة أساسية ، والتي تنتج تسلسلًا متكررًا لقيم الأعمدة. هذا يجعل من الممكن أن يكون الترحيل وعدم ظهور العناصر مرتين. من الممكن أيضًا حساب بذرة مخصصة باستخدام PHP ، مما يسمح لك بإنشاء أرقام Randud pseudo استنادًا إلى متغيرات مثل تاريخ اليوم.

0
Mike Pfeiffer

ليس لإيقاظ سلسلة رسائل قديمة ، ولكن الإجابة (إذا كنت تستخدم Drupal 7 وفلتر بحث مكشوف) هو التحقق من "إزالة نقاط البحث" ضمن "البحث: مصطلحات البحث".

تحت "معايير التصفية"

إضافة "بحث: مصطلحات البحث"

حدد "إزالة نتيجة البحث"

انقر فوق "تطبيق (جميع العروض)"

انقر حفظ

0
Bryan