jimtrue 通过 Slack 提交的 group 可能存在分类问题
获取按节日类型然后按标题排序的所有事件
Festival Pod 是一种自定义分类法。
事件 pod 是一种自定义帖子类型。
// 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)
经过一段时间的测试后,当 event 获得一个针对节日分类法的 pod 关系字段时,它似乎可以工作。 但只有没有groupby。
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
这样做的缺点是,不能再通过 wordpress 的快速编辑表单来维护作为分类法的节日关系(好吧,额外的插件可以做到)
输出是
应该是
当您按 Festival.name 分组时,意味着每个节日只会显示一条记录。
听起来您真正想要的是按年份订购,然后是节日名称,然后是帖子标题,对吗?
从 Slack #support 中的讨论中带来了这个,我们已经使用分类法进行了测试,它似乎忽略了 orderby taxonomy.name。 这主要是我们正在测试的问题。 我正在做一个本地测试,看看orderby
是否存在问题,因为它与关联分类法有关而不是与分类法的关系,因为那会是一个问题。
另外,请注意自己group by
真的应该只用于汇总计算和类似的东西,我猜,如果它只返回每组一行。 @sc0ttkclark是 groupby 最好与“字段”或“sql”参数配对以进行适当汇总计算的情况之一吗?
@sc0ttkclark是真的。 一开始我误解了 groupby 的概念,但仍然存在这样的行为$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
最终就像图像中显示的输出一样。 我尝试使用新安装的 wordpress + pods 版本重现此问题。 不幸的是,它应该如何工作:咧嘴笑:
@kristonovo排序合适吗? 只使用您想要的分类法?
@jimtrue在新安装的测试设置中:是的。 在我的实际项目中:没有。 在这里,我仍然需要分配一个真正的 pod 关系字段来实现想要的输出……我可以遵循任何调试步骤来提供更多信息吗?
@kristonovo这很奇怪。 这意味着其他东西正在“踩踏”排序。 @sc0ttkclark 有什么建议吗? 您可以尝试在 URL 上添加以下内容来查看故障排序: ?pods_debug_sql_all=1
以便我们可以查看被调用的 SQL 查询并进行比较。
您的故障版本上是否还有其他可能涉及分类法的插件?
@kristonovo你截图中的“festival.name”是什么?
@sc0ttkclark那将是 2014 年、2015 年
可能会考虑'orderby' => 'CAST( festival.name AS INT(4) ) DESC, t.post_title'
(如果你想要 2015 年,那么 2014 年)。
我很快就会尝试使用调试 url 和 CAST 查询。
@sc0ttkclark
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)
@jimtrue
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
@sc0ttkclark
DECIMAL(4,0) 不再出现 sql 错误,但再次按事件而非节日排序
与此同时,除了 pods 之外的所有插件都被禁用。 还是有这个问题:(
仅使用 Festival.name 进行测试:
$params = array('orderby' => 'festival.name DESC');
产出
同时$params = array('orderby' => 'festival.name ASC');
产出
您完全确定您提供了有关输出的正确信息吗? 你能提供你用来列出内容的 PHP 吗?
找到解决方案所需的时间越长,我就越担心这可能是我自己的错 :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(); ?>
...这是事件窗格中的设置:
您是否愿意为我们提供登录信息以进入您的 Pods 管理区域为您调查此事? 您可以通过我们的 Slack (http://pods.io/chat/) 或通过以下表格私下发送: https :
是的,我可以准备一个开发环境。 不过需要点时间。 与此同时,我测试了另一件事:
参数始终相同:
$params = array('orderby' => 'festival.name DESC');
多重分类关系是否有可能干扰 orderby? 据我所知,它们保存在数据库中。 即使我删除了关系。
跟进此事,这不是 Pods 的问题,而是 MySQL 的问题。
无论出于何种原因,当您对连接字段执行 ORDER BY 时,它不会对结果进行正确排序。 如果您添加了'where' => 'festival.name IS NOT NULL'
则它开始正确订购。
MySQL 专家将需要进一步挖掘,以确定为什么会发生这种情况以及我们将来如何减轻这种情况。