possível problema de taxonomia com grupo enviado via Slack por jimtrue
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 é
deveria estar
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
enquanto
$params = array('orderby' => 'festival.name ASC');
saídas
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:
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:
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.