Pods: مشكلة التصنيف المحتملة مع المجموعة حسب

تم إنشاؤها على ٧ يونيو ٢٠١٦  ·  21تعليقات  ·  مصدر: pods-framework/pods

مشكلة تصنيف محتملة مع المجموعة من خلال إرسالها عبر Slack بواسطة jimtrue

Help Wanted Support

ال 21 كومينتر

جلب جميع الأحداث مرتبة حسب نوع المهرجان ثم العنوان

جراب المهرجان هو تصنيف مخصص.
جراب الحدث هو نوع منشور مخصص.

// assume we´ve got 6 events and 2 festivals

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1, 'groupby' => 'festival.name');
$events = pods('event', $params)

// output should be
Event 1 (Festival 1)
Event 3 (Festival 1)
Event 5 (Festival 1)
Event 2 (Festival 2)
Event 4 (Festival 2)
Event 6 (Festival 2)

// ... but is
Event 1 (Festival 1)
Event 2 (Festival 2)

بعد الاختبار لفترة من الوقت ، يبدو أنه يعمل عندما يحصل الحدث على حقل علاقة pod يستهدف تصنيف المهرجان. لكن فقط بدون Groupby.

$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);

الجانب السلبي في ذلك هو أن علاقة المهرجان كتصنيف لم يعد من الممكن الحفاظ عليها عبر نموذج wordpress´ quickedit (حسنًا ، يمكن أن يقوم البرنامج الإضافي بذلك)

الإخراج
orderby

يجب ان يكون
orderby-02

عندما تقوم بالتجميع حسب Festival.name يعني أنه سيتم عرض سجل واحد فقط لكل مهرجان.

يبدو أن ما تريده حقًا هو الطلب حسب السنة ، ثم اسم المهرجان ، ثم عنوان المشاركة ، أليس كذلك؟

بإحضار هذا الأمر من المناقشة في Slack #support ، اختبرنا استخدام التصنيف وبدا أنه يتجاهل order by taxonomy.name. هذا هو ما نختبره في المقام الأول باعتباره المشكلة. أقوم بإجراء اختبار محلي لمعرفة ما إذا كانت هناك مشكلة في orderby لأنها تتعلق بالتصنيف المرتبط بالعلاقة بالتصنيف ، لأن ذلك سيكون مشكلة.

أيضًا ، أقوم بتدوين ملاحظة مفادها أنه يجب استخدام group by فقط في حسابات إجماليات الملخص وأشياء من هذا القبيل ، على ما أعتقد ، إذا كان يتم إرجاع صف واحد فقط لكل مجموعة. @ sc0ttkclark هل هذا أحد المواقف التي يتم فيها إقران groupby بشكل أفضل مع معلمات "الحقول" أو "sql" أيضًا لإجراء حسابات تلخيصية مناسبة؟

@ sc0ttkclark هذا صحيح. في البداية أساءت فهم مفهوم groupby ولكن لا يزال هناك سلوك
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
ينتهي مثل الإخراج الموضح في الصور. حاولت إعادة إنتاج هذه المشكلة بإصدار Wordpress + pods الذي تم تثبيته حديثًا. لسوء الحظ ، نجح الأمر كما ينبغي: ابتسامة عريضة:

@ kristonovo وفرزها بشكل مناسب؟ باستخدام التصنيف فقط كما تريد؟

jimtrue ضمن إعداد الاختبار المثبت حديثًا: نعم. مع مشروعي الفعلي: لا. هنا لا يزال يتعين علي تعيين حقل علاقة جراب حقيقي لتحقيق الناتج المطلوب ... هل هناك أي خطوات تصحيح أخطاء يمكنني اتباعها لإعطاء المزيد من المعلومات؟

@ kristonovo هذا غريب جدا. هذا يعني أن شيئًا آخر "يخطو" على هذا النوع. @ sc0ttkclark أي اقتراحات؟ يمكنك محاولة البحث في الفرز المعطل باستخدام ما يلي في عنوان URL: ?pods_debug_sql_all=1 حتى نتمكن من مراقبة استعلامات SQL التي يتم استدعاؤها ومقارنتها.

هل لديك أي مكونات إضافية أخرى تعمل على نسختك المعطلة والتي قد تلامس التصنيف؟

@ kristonovo ما هو "اسم المهرجان" في لقطة الشاشة؟

@ sc0ttkclark التي ستكون 2014 و 2015

قد تفكر في 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' (إذا كنت تريد ذلك 2015 ، ثم 2014).

سأحاول استخدام عنوان url لتصحيح الأخطاء واستعلام CAST قريبًا.

تضمين التغريدة
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
ينتج عنه

[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`' at line 20]
        SELECT DISTINCT `t`.* FROM `wp_table_posts` AS `t` LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON `rel_festival`.`object_id` = `t`.`ID` LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON `rel_tt_festival`.`taxonomy` = 'festival' AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id` LEFT JOIN `wp_table_terms` AS `festival` ON `festival`.`term_id` = `rel_tt_festival`.`term_id` WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) ) ORDER BY CAST(`festival`.`name` AS INT(4)) DESC, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

ربما بدون INT(4) وبدلاً من ذلك استخدم DECIMAL(4,0)

تضمين التغريدة
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
بـ pods_debug_sql_all=1

1

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

2

SELECT

DISTINCT
`t`.*
FROM `wp_table_posts` AS `t`

LEFT JOIN `wp_table_term_relationships` AS `rel_festival` ON
`rel_festival`.`object_id` = `t`.`ID`

LEFT JOIN `wp_table_term_taxonomy` AS `rel_tt_festival` ON
`rel_tt_festival`.`taxonomy` = 'festival'
AND `rel_tt_festival`.`term_taxonomy_id` = `rel_festival`.`term_taxonomy_id`

LEFT JOIN `wp_table_terms` AS `festival` ON
`festival`.`term_id` = `rel_tt_festival`.`term_id`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "event" ) )


ORDER BY `festival`.`name`, post_title, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`

3

`SELECT `ID`, `post_name`, `post_parent` FROM `wp_table_posts` WHERE `post_type` = '_pods_field' AND ( `post_name` IN ( 'festival', 'name' ) )`

4

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

5

SELECT

DISTINCT
*, `t`.`term_id` AS `pod_item_id`
FROM `wp_table_terms` AS `t`
LEFT JOIN `wp_table_term_taxonomy` AS `tt` ON `tt`.`term_id` = `t`.`term_id`
LEFT JOIN `wp_table_term_relationships` AS `tr` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
WHERE ( ( `t`.`term_id` = 67 ) AND ( `tt`.`taxonomy` = "festival" ) AND ( `tt`.`taxonomy` = "festival" ) )


ORDER BY `t`.`name`, `t`.`term_id`

6

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

7

SELECT

DISTINCT
t.post_title AS aktuelles_title, t.post_date AS aktuelles_date, t.post_excerpt AS aktuelles_excerpt, t.ID AS aktuelles_id
FROM `wp_table_posts` AS `t`

WHERE ( ( `t`.`post_status` IN ( "publish" ) ) AND ( `t`.`post_type` = "aktuelles" ) )


ORDER BY t.post_date DESC, `t`.`menu_order`, `t`.`post_title`, `t`.`post_date`
LIMIT 0, 3

تضمين التغريدة
لا مزيد من أخطاء sql مع DECIMAL (4،0) ولكن مرتبًا مرة أخرى حسب الحدث وليس حسب المهرجان
في غضون ذلك ، يتم تعطيل جميع المكونات الإضافية باستثناء البودات. لا تزال تواجه هذه المشكلة :(

الاختبار فقط مع Festival.name:

$params = array('orderby' => 'festival.name DESC');

النواتج
orderby-03

في حين
$params = array('orderby' => 'festival.name ASC');

النواتج
orderby-04

هل أنت متأكد تمامًا من أنك قدمت المعلومات الصحيحة حول المخرجات؟ هل يمكنك توفير PHP الذي تستخدمه لسرد المحتوى؟

كلما استغرق الأمر وقتًا أطول لإيجاد حل ، كلما قلقت أكثر من أنه قد يكون خطأي: الراقصة:

<?php
/**
 * Template Name: Events
 */

get_header();
?>

<div class="column-1-3">
    <h1><a href="/events" target="_self">Events</a><br><br></h1>

    <div class="event">

        <?php
        $params = array('orderby' => 'festival.name');
        $events = pods('event')->find($params);

        if ($events->data()) {

            while ($events->fetch()) {

                echo $events->display('festival.name') . ' - ' . $events->display('post_title') . '<br>';


            }

        }
?>

    </div>

</div>


<?php get_sidebar( 'right' ); ?>
<?php get_footer(); ?>

.. وهذا هو الإعداد في جراب الحدث:

image

هل هناك أي فرصة تكون على استعداد لتقديم معلومات تسجيل دخول لنا للدخول إلى منطقة Pods Admin الخاصة بك للنظر في هذا الأمر من أجلك؟ يمكنك إرسالها بشكل خاص على Slack (http://pods.io/chat/) أو من خلال هذا النموذج: https://pods.io/help/

نعم ، يمكنني إعداد بيئة تطوير. سوف تحتاج بعض الوقت بالرغم من ذلك. في غضون ذلك ، اختبرت شيئًا آخر:

  • إنشاء جراب اختبار يسمى bio (نوع منشور مخصص)
  • فحص مهرجان التصنيف المدمج
  • يعمل orderby الاستعلام مثل مستثنى
  • أضاف تصنيفًا مدمجًا ثانيًا يسمى agegroup (مثله في حجرة الأحداث)
  • orderby الاستعلام لا مزيد من العمل
  • تمت إزالة علاقة التصنيف من bio إلى agegroup
  • لا يزال مضطربًا

المعلمات هي نفسها دائمًا:
$params = array('orderby' => 'festival.name DESC');

هل من الممكن أن تتداخل علاقات التصنيف المتعددة مع orderby؟ يتم الاحتفاظ بها في قاعدة البيانات بقدر ما أعرف. حتى لو قمت بإزالة العلاقة.

متابعة لذلك ، لم تكن مشكلة مع Pods بقدر ما كانت مشكلة في MySQL.

لأي سبب من الأسباب ، عندما قمت بإجراء ORDER BY في حقل مرتبط ، فلن يتم ترتيب النتائج بشكل صحيح. إذا أضفت 'where' => 'festival.name IS NOT NULL' فسيبدأ الطلب بشكل صحيح.

سيطلب خبير MySQL مزيدًا من البحث لتحديد سبب حدوث ذلك وكيف يمكننا تخفيفه في المستقبل.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات