Pods: group by 可能存在分类问题

创建于 2016-06-07  ·  21评论  ·  资料来源: pods-framework/pods

jimtrue 通过 Slack 提交的 group 可能存在分类问题

Help Wanted Support

所有21条评论

获取按节日类型然后按标题排序的所有事件

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 的快速编辑表单来维护作为分类法的节日关系(好吧,额外的插件可以做到)

输出是
orderby

应该是
orderby-02

当您按 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');

产出
orderby-03

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

产出
orderby-04

您完全确定您提供了有关输出的正确信息吗? 你能提供你用来列出内容的 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(); ?>

...这是事件窗格中的设置:

image

您是否愿意为我们提供登录信息以进入您的 Pods 管理区域为您调查此事? 您可以通过我们的 Slack (http://pods.io/chat/) 或通过以下表格私下发送: https :

是的,我可以准备一个开发环境。 不过需要点时间。 与此同时,我测试了另一件事:

  • 创建一个名为 bio(自定义帖子类型)的测试 pod
  • 检查内置分类节
  • orderby 查询的工作方式类似于excepted
  • 添加了第二个名为 agegroup 的内置分类法(就像它在事件 pod 中一样)
  • orderby 查询不再有效
  • 删除了从生物到年龄组的分类关系
  • 还是乱

参数始终相同:
$params = array('orderby' => 'festival.name DESC');

多重分类关系是否有可能干扰 orderby? 据我所知,它们保存在数据库中。 即使我删除了关系。

跟进此事,这不是 Pods 的问题,而是 MySQL 的问题。

无论出于何种原因,当您对连接字段执行 ORDER BY 时,它不会对结果进行正确排序。 如果您添加了'where' => 'festival.name IS NOT NULL'则它开始正确订购。

MySQL 专家将需要进一步挖掘,以确定为什么会发生这种情况以及我们将来如何减轻这种情况。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

tuanmh picture tuanmh  ·  5评论

benfavre picture benfavre  ·  3评论

JoryHogeveen picture JoryHogeveen  ·  3评论

jcampbell05 picture jcampbell05  ·  5评论

jnaklaas picture jnaklaas  ·  3评论