2012-04-09 5 views
1

私は自分のベストレースをWordPressカスタムタイプから見つけるためにカスタムSELECTクエリを作成しようとしていますが、時刻はカスタムメタフィールドです。WordPressのカスタムSELECTクエリでMINを使用

これは私が投稿を選択するために使用したクエリです。私はデバッグのためにそれを単純化してきましたが、最終的に私は、いくつかの用語のナメクジを選択し、GROUP BYを使用してそれぞれのMINを見つけたい:

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

(Iアレイに結果を出力し、一時的にそれをチェックするためにprint_rを使用しています)

これは、 '10mi'用語で2つのレース/ランを選択し、それらのための正しい時間/日付/タイトルを表示します。私はMIN機能を追加したとき

問題が来る:

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

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

私はLEFT JOINともINNER JOINを使用するようにFROM句を変更しようとしましたが、同じことが起こります:それは、両方の「10mi」の実行を選択するための罰金ですが、私はMIN機能を追加し、間違った出力を提供します。

ご協力いただきありがとうございます。これは私の最初の投稿ですので、詳細を追加する必要がある場合はお知らせください。

+0

更新: 'MIN'の代わりに 'ORDER BY m.meta_value LIMIT 1'を使用すると正しい結果が得られますが、クエリを複製することなく、これを複数の用語のスラッグにどのように推論するのか分かりません。確かに 'MIN'と' GROUP BY'を使ってこれを行うことは可能でしょうか? – seestevecode

+0

次に、['[グループごとに最大のn]'](http://stackoverflow.com/questions/tagged/greatest-n-per-group)クエリが必要です。 –

+0

ヒント@ypercubeありがとうございました。それは私が以下に投稿した解決策を見つけるのを助けた。私はあなたが答えとしてそれを投稿しなかったので、助けをあなたにもっと信用する方法を知らないのは恐れです。しかし、それは非常に感謝しています。 – seestevecode

答えて

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

この基本的に受注値によると、すなわち、最初の答えを取ります。最小値の。

関連する問題