Pods: posible problema de taxonomía con el grupo por

Creado en 7 jun. 2016  ·  21Comentarios  ·  Fuente: pods-framework/pods

posible problema de taxonomía con el grupo enviado a través de Slack por jimtrue

Help Wanted Support

Todos 21 comentarios

Obtenga todos los eventos ordenados por tipo de festival y luego por título

festival pod es una taxonomía personalizada.
El pod de eventos es un tipo de publicación personalizada.

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

Después de probar un tiempo, parece funcionar cuando el evento obtiene un campo de relación de grupo dirigido a la taxonomía de festivales. Pero solo sin groupby.

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

La desventaja de esto es que la relación del festival como taxonomía ya no se podía mantener a través del formulario de edición rápida de wordpress (ok, un complemento adicional podría hacerlo)

la salida es
orderby

debiera ser
orderby-02

Cuando agrupa por festival.name significa que solo se mostrará un registro por festival.

Parece que lo que realmente quieres es ordenar por año, luego el nombre del festival y luego el título de la publicación, ¿verdad?

Traído este de la discusión en Slack #support, habíamos probado con el uso de Taxonomy y parecía estar ignorando el orderby taxonomy.name. Eso es principalmente lo que estamos probando como problema. Estoy haciendo una prueba local para ver si hay un problema con orderby ya que se relaciona con la taxonomía asociada sobre la relación con la taxonomía, porque eso sería un problema.

Además, tomando nota de que group by realmente solo debería usarse para cálculos de totales resumidos y cosas así, supongo, si solo devuelve una fila por grupo. @ sc0ttkclark ¿ es esta una de esas situaciones en las que groupby se combina mejor con los parámetros de 'campos' o 'sql' también para hacer cálculos de resumen adecuados?

@ sc0ttkclark eso es cierto. Al principio entendí mal el concepto de groupby, pero todavía existe el comportamiento que
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
termina como la salida que se muestra en las imágenes. Intenté reproducir este problema con una versión de wordpress + pods recién instalada. Desafortunadamente, funcionó como debería: sonriendo:

@kristonovo ¿ Se ha ordenado correctamente? ¿Utilizas solo taxonomía como querías?

@jimtrue dentro de la configuración de prueba recién instalada: sí. Con mi proyecto actual: no. Aquí todavía tengo que asignar un campo de relación de pod real para lograr el resultado deseado ... ¿hay algún paso de depuración que pueda seguir para dar más información?

@kristonovo Eso es bastante extraño. Eso significa que algo más está 'pisando' el género. @ sc0ttkclark ¿ alguna sugerencia? Podría intentar ver el tipo que funciona mal con lo siguiente en la URL: ?pods_debug_sql_all=1 para que podamos echar un vistazo a las consultas SQL que se llaman y compararlas.

¿Tiene otros complementos ejecutándose en su versión defectuosa que podrían estar tocando la taxonomía?

@kristonovo ¿cuál es en tu captura de pantalla el "festival.name"?

@ sc0ttkclark que sería el 2014, 2015

Podría considerar 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' (si lo desea 2015, luego 2014).

Lo intentaré con la URL de depuración y la consulta CAST pronto.

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

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

Tal vez sin INT(4) y en su lugar use DECIMAL(4,0)

@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
con 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
no más error de sql con DECIMAL (4,0) pero nuevamente ordenado por evento, no por festival
Mientras tanto, todos los complementos, excepto los pods, están desactivados. Todavía tengo ese problema :(

Probando solo con festival.name:

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

salidas
orderby-03

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

salidas
orderby-04

¿Está completamente seguro de haber proporcionado la información correcta sobre la salida? ¿Puede proporcionar el PHP que está utilizando para enumerar el contenido?

Cuanto más tiempo se tarda en encontrar una solución, más me preocupa que pueda ser mi culpa: bailarina:

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

... y esta es la configuración en el pod de eventos:

image

¿Alguna posibilidad de que esté dispuesto a proporcionarnos un inicio de sesión para que entremos en el área de administración de sus pods y lo investiguemos por usted? Puedes enviarlo de forma privada en nuestro Slack (http://pods.io/chat/) o mediante este formulario: https://pods.io/help/

Sí, podría preparar un entorno de desarrollo. Aunque necesitaría algo de tiempo. Mientras tanto, probé otra cosa:

  • creando un grupo de prueba llamado bio (tipo de publicación personalizada)
  • festival de taxonomía incorporado comprobado
  • orderby query funciona como exceptuado
  • agregó una segunda taxonomía incorporada llamada agegroup (como en el pod de eventos)
  • orden por consulta no más trabajo
  • se eliminó la relación de taxonomía de bio a grupo de edad
  • todavía desordenado

params siempre los mismos:
$params = array('orderby' => 'festival.name DESC');

¿Podría ser posible que múltiples relaciones taxonómicas estén interfiriendo con orderby? Se mantienen en la base de datos que yo sepa. Incluso si elimino la relación.

Siguiendo con esto, no fue un problema con Pods tanto como un problema con MySQL.

Por alguna razón, cuando hiciste un ORDENAR POR un campo unido, no ordenaría los resultados correctamente. Si agregó 'where' => 'festival.name IS NOT NULL' entonces comenzó a ordenar correctamente.

Un experto en MySQL necesitará investigar más para determinar por qué sucede esto y cómo podemos mitigarlo en el futuro.

¿Fue útil esta página
0 / 5 - 0 calificaciones