0

カスタムの Wordpress MySQL クエリに問題があります。私の状況は次のとおりです。投稿用の通常の投稿タイプ「投稿」と、作成者に関する情報用のカスタム投稿タイプ「作成者」があります。「著者」投稿タイプはすべての著者を保持しますが、すべてが投稿の著者である必要はありません。

各投稿 (タイプ「投稿」および「作成者」) には、作成者の正確な名前 (例: 「John Smith」) を含むカスタム分類法があります。投稿タイプ 'author' には、著者の名と姓の追加のカスタム メタ値があります (複雑になる可能性があり、姓、名で簡単に並べ替えることができるため)。

現在、投稿を公開したすべての作成者を選択し、投稿数を数え、名前に関連付けられたメタ値を表示しようとしています。ある投稿タイプ (「投稿」) からの分類を、別の投稿タイプ (「作成者」) からのメタ値を 1 行で相互参照する方法がわかりません。

私が欲しいもの:

John Smith    John    Smith    10

私がこれまでに持っているもの:

John Smith    10    John
John Smith    10    Smith

以下のクエリに行き詰まっています。どんな助けでも大歓迎です!

SELECT
    N, C, meta_value
    FROM
        (SELECT
            t.name AS N, count(*) AS C
                FROM
                    wp_2_posts p
                    INNER JOIN wp_2_term_relationships AS tr ON p.ID=tr.object_id
                    INNER JOIN wp_2_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
                    INNER JOIN wp_2_terms AS t ON tt.term_id = t.term_id
                WHERE 1=1
                    AND tt.taxonomy = 'myauthor'
                    AND p.post_type = 'post'
                    AND p.post_status = 'publish'
                GROUP BY
                    N
                ORDER BY
                C DESC) AS x
        INNER JOIN wp_2_posts p2
        INNER JOIN wp_2_term_relationships AS tr2 ON p2.ID=tr2.object_id
        INNER JOIN wp_2_term_taxonomy AS tt2 ON tr2.term_taxonomy_id = tt2.term_taxonomy_id
        INNER JOIN wp_2_terms AS t2 ON tt2.term_id = t2.term_id
        INNER JOIN wp_2_postmeta AS m2 ON m2.post_id = p2.ID
            WHERE 1=1
                AND post_type = 'author'
                AND t2.name = x.N
                AND (m2.meta_key = 'lastname' OR m2.meta_key = 'firstname')
4

1 に答える 1

0

これはかなり厄介な解決策ですが、それを改善する方法について何かアイデアはありますか?

SELECT
    N, C, m2.meta_value AS L, m3.meta_value AS F
    FROM
        (SELECT
            t.name AS N, count(*) AS C
                FROM
                    wp_2_posts p
                    INNER JOIN wp_2_term_relationships AS tr ON p.ID=tr.object_id
                    INNER JOIN wp_2_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
                    INNER JOIN wp_2_terms AS t ON tt.term_id = t.term_id
                WHERE 1=1
                    AND tt.taxonomy = 'myauthor'
                    AND p.post_type = 'post'
                    AND p.post_status = 'publish'
                GROUP BY
                    N) AS x
        INNER JOIN wp_2_posts p2
        INNER JOIN wp_2_term_relationships AS tr2 ON p2.ID=tr2.object_id
        INNER JOIN wp_2_term_taxonomy AS tt2 ON tr2.term_taxonomy_id = tt2.term_taxonomy_id
        INNER JOIN wp_2_terms AS t2 ON tt2.term_id = t2.term_id
        INNER JOIN wp_2_postmeta AS m2 ON m2.post_id = p2.ID
        INNER JOIN wp_2_posts p3
        INNER JOIN wp_2_term_relationships AS tr3 ON p3.ID=tr3.object_id
        INNER JOIN wp_2_term_taxonomy AS tt3 ON tr3.term_taxonomy_id = tt3.term_taxonomy_id
        INNER JOIN wp_2_terms AS t3 ON tt3.term_id = t3.term_id
        INNER JOIN wp_2_postmeta AS m3 ON m3.post_id = p3.ID
            WHERE 1=1
                AND p3.post_type = 'author'
                AND t3.name = x.N
                AND m3.meta_key = 'firstname'
                AND p2.post_type = 'author'
                AND t2.name = x.N
                AND m2.meta_key = 'lastname'
    ORDER BY
        C DESC,
        L
于 2012-10-30T13:57:41.460 に答える