Pods: возможная проблема таксономии с группой по

Созданный на 7 июн. 2016  ·  21Комментарии  ·  Источник: pods-framework/pods

возможная проблема таксономии с группой, отправленная через Slack, пользователем jimtrue

Help Wanted Support

Все 21 Комментарий

Получить все события, упорядоченные по типу фестиваля, а затем по названию

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

После некоторого тестирования кажется, что это работает, когда событие получает поле отношений стручка, нацеленное на фестивальную таксономию. Но только без groupby.

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

Обратной стороной этого является то, что отношение фестиваля как таксономии больше не может поддерживаться через форму быстрого редактирования wordpress (хорошо, дополнительный плагин мог бы это сделать)

выход
orderby

должно быть
orderby-02

Когда вы группируете по festival.name, это означает, что будет показана только одна запись на фестиваль.

Похоже, вы действительно хотите заказать по году, затем по названию фестиваля, а затем по заголовку публикации, верно?

Этот вариант взят из обсуждения в Slack #support, мы тестировали его с использованием Taxonomy, и оказалось, что он игнорирует orderby taxonomy.name. Это в первую очередь то, что мы тестируем как проблему. Я провожу локальный тест, чтобы увидеть, есть ли проблема с orderby в том, что касается связанной таксономии, а не отношения к таксономии, потому что это было бы проблемой.

Кроме того, отмечу для себя, что group by действительно следует использовать только для вычислений итоговых сумм и тому подобного, я предполагаю, если он возвращает только одну строку для каждой группы. @ sc0ttkclark - это одна из тех ситуаций, когда groupby лучше всего сочетать с параметрами 'fields' или 'sql', чтобы выполнять правильные итоговые вычисления?

@ sc0ttkclark, это правда. Вначале я неправильно понял концепцию groupby, но все же есть поведение, которое
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
заканчивается так, как показано на изображениях. Я попытался воспроизвести эту проблему с помощью только что установленной версии wordpress + pods. К сожалению, сработало так, как должно

@kristonovo правильно отсортировано? Используете только таксономию, как хотите?

@jimtrue в только что установленной тестовой настройке: да. С моим настоящим проектом: нет. Здесь мне все еще нужно назначить реальное поле отношения стручка для достижения желаемого результата ... есть ли какие-либо шаги отладки, которые я мог бы выполнить, чтобы дать некоторую дополнительную информацию?

@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
больше нет ошибки sql с DECIMAL (4,0), но снова упорядочено по событию, а не по фестивалю
Тем временем все плагины, кроме модулей, отключены. Проблема все еще есть :(

Тестирование только с 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://pods.io/help/

Да, я мог бы подготовить среду разработки. Хотя потребуется некоторое время. Тем временем я протестировал еще одну вещь:

  • создание тестового модуля под названием bio (пользовательский тип сообщения)
  • проверенный встроенный фестиваль таксономии
  • запрос orderby работает как исключенный
  • добавлена ​​вторая встроенная таксономия, называемая возрастной группой (как в пакете событий)
  • заказ по запросу больше не работает
  • удалено таксономическое отношение из биографии к возрастной группе
  • все еще в беспорядке

параметры всегда одинаковы:
$params = array('orderby' => 'festival.name DESC');

Возможно ли, что множественные отношения таксономии мешают orderby? Насколько мне известно, они хранятся в базе данных. Даже если сниму отношение.

После этого выяснилось, что проблема была не столько в модулях Pods, сколько в MySQL.

По какой-то причине, когда вы выполняете ORDER BY объединенного поля, результаты не упорядочиваются правильно. Если вы добавили 'where' => 'festival.name IS NOT NULL' то он начал правильно заказывать.

Специалисту по MySQL потребуются дополнительные исследования, чтобы определить, почему это происходит и как мы можем смягчить это в будущем.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги