JimtrueによってSlack経由で送信されたグループでの分類の問題の可能性
フェスティバルの種類、タイトルの順に並べられたすべてのイベントを取得します
フェスティバルポッドはカスタム分類法です。
イベントポッドはカスタム投稿タイプです。
// 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);
これの欠点は、分類法としてのフェスティバルの関係が、ワードプレスのクイック編集フォームを介して維持できなくなったことです(わかりました、追加のプラグインでそれを行うことができます)
出力は
する必要があります
Festival.nameでグループ化すると、フェスティバルごとに1つのレコードのみが表示されます。
あなたが本当に望んでいるのは、年、フェスティバル名、投稿タイトルの順に注文することですよね?
これはSlack#supportでの議論から持ち込まれ、Taxonomyを使用してテストしましたが、orderbytaxonomy.nameを無視しているように見えました。 これが主に私たちが問題としてテストしていることです。 orderby
問題があるかどうかを確認するためにローカルテストを行っています。これは、分類法との関係よりも関連する分類法に関連しているためです。これは問題になるためです。
また、 group by
は実際には要約合計の計算などにのみ使用する必要があることに注意してください。これは、グループごとに1行しか返さない場合だと思います。 @ sc0ttkclarkは、groupbyを「fields」または「sql」パラメーターと組み合わせて適切な要約計算を行うのに最適な状況の1つですか?
@ sc0ttkclarkそれは本当です。 最初はgroupbyの概念を誤解していましたが、それでも次のような動作があります。
$params = array('orderby' => 'festival.name, post_title', 'limit' => -1);
画像に示されている出力のようになります。 新しくインストールしたワードプレス+ポッドバージョンでこの問題を再現しようとしました。 残念ながら、それは本来の方法で機能しました:ニヤリと:
@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
DECIMAL(4,0)でSQLエラーは発生しませんが、フェスティバルではなくイベントごとに並べ替えられます
その間、ポッドを除くすべてのプラグインは無効になります。 まだその問題があります:(
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(); ?>
...そしてこれはイベントポッドの設定です:
ポッド管理エリアにアクセスしてこれを調べるために、ログインを提供していただける可能性はありますか? Slack(http://pods.io/chat/)または次のフォームから非公開で送信できます: https :
はい、開発環境を準備できました。 しかし、少し時間が必要になります。 その間に、私はもう1つテストしました。
paramsは常に同じです:
$params = array('orderby' => 'festival.name DESC');
複数の分類関係がorderbyに干渉している可能性はありますか? 私の知る限り、それらはデータベースに保存されています。 関係を取り除いても。
これに続いて、MySQLの問題ほど、ポッドの問題ではありませんでした。
何らかの理由で、結合されたフィールドでORDER BYを実行すると、結果が正しく順序付けられませんでした。 'where' => 'festival.name IS NOT NULL'
を追加すると、正しく注文が開始されました。
MySQLの専門家は、これが発生する理由と、将来それを軽減する方法を判断するために、さらに掘り下げる必要があります。