1

SELECT時間がカスタムメタフィールドであるWordPressカスタムタイプから自分のパーソナルベストレースを見つけるためのカスタムクエリを作成しようとしています。

これは、投稿を選択するために使用したクエリです。MINデバッグのために簡略化しましたが、最終的にはいくつかの用語スラッグを選択し、それぞれを使用してを見つけたいと思いますGROUP BY

        SELECT      t.slug,
                    p.ID, 
                    p.post_date,
                    p.post_title,                    
                    m.meta_value as pb_mins
        FROM        $wpdb->posts p,
                    $wpdb->postmeta m,
                    $wpdb->term_relationships tr,
                    $wpdb->term_taxonomy tt,
                    $wpdb->terms t
        WHERE       p.ID = tr.object_id
                AND p.ID = m.post_id
                AND tr.term_taxonomy_id = tt.term_taxonomy_id
                AND tt.term_id = t.term_id
                AND p.post_type = 'runs'
                AND m.meta_key = 'ssr_duration_min'
                AND t.slug in ('10mi')

(結果を配列に出力し、print_r一時的にチェックするために使用しています。)

これにより、「10mi」という用語の2つのレース/ランが選択され、それらの正しい時間/日付/タイトルが表示されます。

MIN関数を追加すると問題が発生します。

        SELECT      t.slug,
                    p.ID, 
                    p.post_date,
                    p.post_title,                    
                    MIN(m.meta_value) as pb_mins

正しい(最小)時間が選択されていますが、他の詳細(日付、タイトル)は他の10miラン/レースからのものです。

FROM使用する句を変更しようとしましLEFT JOININNER JOINが、同じことが起こります。両方の「10mi」実行を選択することは問題ありませんが、MIN関数を追加すると間違った出力が表示されます。

あなたが提供できるどんな助けにも感謝します。これは私の最初の投稿ですので、さらに詳細を追加する必要がある場合はお知らせください。

4

2 に答える 2

1

私はこれに対する私の解決策を投稿することに決して取り掛かりませんでした。久しぶりなので、どうやってそこにたどり着いたのか(おそらく試行錯誤)は完全には思い出せませんが、これが誰かに役立つなら、彼らはそれを歓迎します。これ以上詳しく考えたら、コメントとしてこの回答に追加します。

            SELECT      p1.ID,
                        m1.meta_value,
                        t1.name
            FROM        $wpdb->posts p1,
                        $wpdb->postmeta m1,
                        $wpdb->term_relationships tr1,
                        $wpdb->term_taxonomy tt1,
                        $wpdb->terms t1,
                        (   SELECT      t2.slug as pb_distance,
                                        MIN(m2.meta_value) as pb_duration
                            FROM        $wpdb->posts p2,
                                        $wpdb->postmeta m2,
                                        $wpdb->term_relationships tr2,
                                        $wpdb->term_taxonomy tt2,
                                        $wpdb->terms t2
                            WHERE       p2.ID = tr2.object_id
                                    AND p2.ID = m2.post_id
                                    AND tr2.term_taxonomy_id = tt2.term_taxonomy_id
                                    AND tt2.term_id = t2.term_id
                                    AND p2.post_type = 'runs'
                                    AND p2.post_status = 'publish'
                                    AND m2.meta_key = 'ssr_duration_min'
                                    AND t2.slug IN $slugs
                            GROUP BY    t2.slug ) pb
            WHERE       p1.ID = m1.post_id
                    AND p1.ID = tr1.object_id
                    AND tr1.term_taxonomy_id = tt1.term_taxonomy_id
                    AND tt1.term_id = t1.term_id
                    AND p1.post_type = 'runs'
                    AND p1.post_status = 'publish'
                    AND m1.meta_key = 'ssr_duration_min'
                    AND t1.slug in $slugs
                    AND m1.meta_value = pb.pb_duration
            ORDER BY    meta_value+0
于 2012-06-15T14:30:41.127 に答える
0

私が使用した別のオプションは、わずかに異なるクエリでも機能しますが、次のとおりです。

        SELECT      p.ID,
                    m.meta_value,
                    t.name
        FROM        $wpdb->posts p,
                    $wpdb->postmeta m,
                    $wpdb->term_relationships tr,
                    $wpdb->term_taxonomy tt,
                    $wpdb->terms t
        WHERE       p.ID = m.post_id
                AND p.ID = tr.object_id
                AND tr.term_taxonomy_id = tt.term_taxonomy_id
                AND tt.term_id = t.term_id
                AND p.post_type = 'runs'
                AND p.post_status = 'publish'
                AND m.meta_key = 'ssr_duration_min'
                AND t.slug IN $slugs
        ORDER BY    meta_value+0
        LIMIT       1

これは基本的に値順に並べられ、最初の答えのみを取ります。最小値の。

于 2012-06-15T14:35:36.540 に答える