Pods: possível problema de taxonomia com agrupar por

Criado em 7 jun. 2016  ·  21Comentários  ·  Fonte: pods-framework/pods

possível problema de taxonomia com grupo enviado via Slack por jimtrue

Help Wanted Support

Todos 21 comentários

Obtenha todos os eventos ordenados por tipo de festival e, a seguir, por título

pod de festival é uma taxonomia personalizada.
pod de eventos é um tipo de postagem 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)

Depois de testar um pouco, parece funcionar quando o evento obtém um campo de relacionamento de pod visando a taxonomia de festival. Mas só sem um grupo.

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

A desvantagem disso é que a relação do festival como uma taxonomia não poderia mais ser mantida via formato quickedit do wordpress (ok, um plugin extra poderia fazer isso)

saída é
orderby

deveria estar
orderby-02

Quando você agrupa por festival.name significa que apenas um registro por festival será exibido.

Parece que o que você realmente quer é pedir por ano, depois o nome do festival e depois o título da postagem, certo?

Trazido este da discussão no Slack #support, testamos usando Taxonomy e parecia estar ignorando o orderby taxonomy.name. Isso é principalmente o que estamos testando como o problema. Estou fazendo um teste local para ver se há um problema com orderby relacionado à taxonomia associada em relação à taxonomia, porque isso seria um problema.

Além disso, tomando nota para mim mesmo que group by deve realmente ser usado apenas para cálculos de totais resumidos e coisas assim, estou supondo, se estiver retornando apenas uma linha por grupo. @ sc0ttkclark é uma daquelas situações em que groupby é melhor emparelhado com parâmetros 'fields' ou 'sql' para fazer cálculos de resumo adequados?

@ sc0ttkclark isso é verdade. No começo eu entendi mal o conceito de groupby, mas ainda existe o comportamento que
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
acaba como a saída mostrada nas imagens. Tentei reproduzir esse problema com uma versão de wordpress + pods recém-instalada. Infelizmente, funcionou como deveria: sorrindo:

@kristonovo Está classificado de forma adequada? Usando apenas a taxonomia como você queria?

@jimtrue na configuração de teste recém-instalada: sim. Com meu projeto atual: não. Ainda tenho que atribuir um campo de relacionamento de pod real para obter a saída desejada ... há alguma etapa de depuração que eu possa seguir para fornecer mais informações?

@kristonovo Isso é muito estranho. Isso significa que algo mais está "pisando" no assunto. @ sc0ttkclark alguma sugestão? Você poderia tentar examinar a classificação com defeito com o seguinte anexado à URL: ?pods_debug_sql_all=1 para que pudéssemos dar uma olhada nas consultas SQL sendo chamadas e compará-las.

Você tem algum outro plug-in em execução em sua versão com defeito que pode estar afetando a taxonomia?

@kristonovo o que na sua imagem é o "festival.name"?

@ sc0ttkclark isso seria o 2014, 2015

Pode considerar 'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title' (se você quiser 2015, então 2014).

Vou tentar depurar url e fazer uma consulta CAST em breve.

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

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

Talvez sem INT(4) e, em vez disso, use DECIMAL(4,0)

@jimtrue
array('orderby' => 'festivaljahr.name, post_title', 'limit' => -1);
com 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
não há mais erro de sql com DECIMAL (4,0), mas novamente ordenado por evento, não por festival
Enquanto isso, todos os plug-ins, exceto os pods, estão desativados. Ainda tendo esse problema :(

Testando apenas com festival.name:

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

saídas
orderby-03

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

saídas
orderby-04

Tem certeza de que forneceu as informações corretas sobre a saída? Você pode fornecer o PHP que está usando para listar o conteúdo?

Quanto mais tempo leva para encontrar uma solução, mais me preocupo se pode ser minha própria culpa: dançarina:

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

... e esta é a configuração no pod de evento:

image

Alguma chance de você estar disposto a fornecer um login para que possamos entrar em sua área de administração de pods para verificar isso para você? Você pode enviá-lo de forma privada em nosso Slack (http://pods.io/chat/) ou por meio deste formulário: https://pods.io/help/

Sim, eu poderia preparar um ambiente de desenvolvimento. Precisaria de algum tempo. Nesse ínterim, testei outra coisa:

  • criar um pod de teste chamado bio (tipo de postagem personalizado)
  • verificado festival de taxonomia embutido
  • pedido por consulta funciona como exceção
  • adicionou uma segunda taxonomia integrada chamada grupo etário (como no pod de evento)
  • pedido por consulta não funciona mais
  • removeu a relação de taxonomia de bio para grupo etário
  • ainda desordenado

params sempre o mesmo:
$params = array('orderby' => 'festival.name DESC');

Será possível que múltiplas relações de taxonomia estejam interferindo no controle de ordens? Eles são mantidos no banco de dados, tanto quanto eu sei. Mesmo se eu remover a relação.

Acompanhando isso, não era um problema com os pods tanto quanto era com o MySQL.

Por alguma razão, quando você executava um ORDER BY em um campo associado, ele não ordenava os resultados corretamente. Se você adicionou 'where' => 'festival.name IS NOT NULL' então ele começou a pedir corretamente.

Um especialista em MySQL precisará fazer mais pesquisas para determinar por que isso acontece e como podemos mitigá-lo no futuro.

Esta página foi útil?
0 / 5 - 0 avaliações