Pods: mögliches Taxonomieproblem mit group by

Erstellt am 7. Juni 2016  ·  21Kommentare  ·  Quelle: pods-framework/pods

mögliches Taxonomie-Problem mit der Gruppe durch Übermittlung über Slack von jimtrue

Help Wanted Support

Alle 21 Kommentare

Rufen Sie alle Veranstaltungen ab, die nach Festivaltyp und dann nach Titel geordnet sind

festival pod ist eine benutzerdefinierte Taxonomie.
Ereignis-Pod ist ein benutzerdefinierter Beitragstyp.

// 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)

Nach einer Weile des Testens scheint es zu funktionieren, wenn event ein Pod-Beziehungsfeld erhält, das auf die Festival-Taxonomie abzielt. Aber nur ohne groupby.

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

Der Nachteil dabei ist, dass die Festivalbeziehung als Taxonomie nicht mehr über das Quickedit-Formular von WordPress gepflegt werden konnte (ok, extra Plugin könnte es tun)

Ausgabe ist
orderby

sollte sein
orderby-02

Wenn Sie nach festival.name gruppieren, wird nur ein Datensatz pro Festival angezeigt.

Klingt so, als ob Sie wirklich nach Jahr ordnen möchten, dann Festivalname, dann Posttitel, oder?

Ich habe dieses aus der Diskussion im Slack #support mitgebracht, wir hatten es mit Taxonomy getestet und es schien die Reihenfolge nach taxonomy.name zu ignorieren. Das ist in erster Linie das, was wir als Problem testen. Ich mache einen lokalen Test, um zu sehen, ob es ein Problem mit orderby , das sich auf die zugehörige Taxonomie oder die Beziehung zur Taxonomie bezieht, da dies ein Problem wäre.

Ich denke auch, dass group by wirklich nur für Summenberechnungen und ähnliches verwendet werden sollte, schätze ich, wenn nur eine Zeile pro Gruppe zurückgegeben wird. @sc0ttkclark ist dies eine der Situationen, in denen groupby am besten auch mit den Parametern 'fields' oder 'sql' gepaart wird, um ordnungsgemäße zusammenfassende Berechnungen durchzuführen?

@sc0ttkclark das stimmt. Am Anfang habe ich das Konzept von groupby falsch verstanden, aber es gibt immer noch das Verhalten, das
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
endet wie die in den Bildern gezeigte Ausgabe. Ich habe versucht, dieses Problem mit einer frisch installierten WordPress + Pods-Version zu reproduzieren. Leider hat es funktioniert wie es soll :grins:

@kristonovo Es wurde

@jimtrue im frisch installierten Test-Setup: ja. Bei meinem aktuellen Projekt: nein. Hier muss ich noch ein echtes Pod-Beziehungsfeld zuweisen, um die gewünschte Ausgabe zu erzielen ... gibt es irgendwelche Debug-Schritte, denen ich folgen könnte, um weitere Informationen zu geben?

@kristonovo Das ist ziemlich seltsam. Das bedeutet, dass etwas anderes auf die Art „tritt“. @sc0ttkclark irgendwelche Vorschläge? Sie könnten versuchen, die fehlerhafte Sortierung mit folgendem an die URL angehängt zu betrachten: ?pods_debug_sql_all=1 damit wir die aufgerufenen SQL-Abfragen im Auge behalten und vergleichen können.

Haben Sie andere Plugins auf Ihrer fehlerhaften Version, die die Taxonomie berühren könnten?

@kristonovo was ist in deinem Screenshot der "festival.name"?

@sc0ttkclark das wäre der 2014, 2015

Könnte 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' Betracht ziehen (wenn Sie es 2015 wollen, dann 2014).

Ich werde es bald mit Debug-URL und CAST-Abfrage ausprobieren.

@sc0ttkclark
array('orderby' => 'CAST(festivaljahr.name AS INT(4)) DESC, post_title', 'limit' => -1);
produziert

[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`

Vielleicht ohne INT(4) und stattdessen DECIMAL(4,0)

@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
mit 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

@sc0ttkclark
kein SQL-Fehler mehr mit DECIMAL(4,0), sondern wieder nach Ereignis geordnet, nicht nach Festival
Inzwischen sind alle Plugins außer Pods deaktiviert. Habe das Problem immer noch :(

Test nur mit festival.name:

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

Ausgänge
orderby-03

während
$params = array('orderby' => 'festival.name ASC');

Ausgänge
orderby-04

Sind Sie sicher, dass Sie die richtigen Informationen zur Ausgabe angegeben haben? Können Sie das PHP angeben, mit dem Sie den Inhalt auflisten?

Je länger es dauert, eine Lösung zu finden, desto mehr mache ich mir Sorgen, dass es meine eigene Schuld sein könnte :dancer:

<?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(); ?>

... und das ist die Einstellung im Event-Pod:

image

Besteht die Möglichkeit, dass Sie uns ein Login zur Verfügung stellen, um in Ihren Pods-Admin-Bereich zu gelangen, um dies für Sie zu überprüfen? Du kannst es privat auf unserem Slack (http://pods.io/chat/) oder über dieses Formular senden: https://pods.io/help/

Ja, ich könnte eine Entwicklungsumgebung vorbereiten. Würde allerdings etwas Zeit brauchen. In der Zwischenzeit habe ich noch etwas getestet:

  • Erstellen eines Test-Pods namens bio (benutzerdefinierter Beitragstyp)
  • geprüftes eingebautes Taxonomie-Festival
  • orderby-Abfrage funktioniert wie ausgenommen
  • eine zweite integrierte Taxonomie namens agegroup hinzugefügt (wie im Event-Pod)
  • Bestellung per Abfrage funktioniert nicht mehr
  • Taxonomie-Beziehung von Bio zur Altersgruppe entfernt
  • immer noch ungeordnet

Parameter immer gleich:
$params = array('orderby' => 'festival.name DESC');

Könnte es möglich sein, dass mehrere Taxonomiebeziehungen die Ordnung stören? Sie werden meines Wissens in der Datenbank gespeichert. Auch wenn ich die Relation entferne.

Im Anschluss daran war es kein Problem mit Pods, sondern ein Problem mit MySQL.

Wenn Sie ORDER BY ein verbundenes Feld ausführten, wurden die Ergebnisse aus irgendeinem Grund nicht richtig sortiert. Wenn Sie 'where' => 'festival.name IS NOT NULL' hinzugefügt haben, wurde die Bestellung korrekt gestartet.

Ein MySQL-Experte muss weiter graben, um herauszufinden, warum dies passiert und wie wir es in Zukunft abschwächen können.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen