0

私はこのようなselectステートメントを持っています:

   $results = $wpdb->get_results( "SELECT $wpdb->postmeta.meta_value 
   FROM $wpdb->postmeta    
   WHERE 1=1 AND $wpdb->postmeta.meta_key = 'geo_short_address'" );

しかし、私は現在、このステートメントをフィルタリングして、「_Company」と呼ばれるメタキーフィールドにエントリがあるか空ではない「geo_short_address」のみを含めるようにしています。

たとえば、同じ投稿IDがあります。

    post_id        meta_key           meta_value
       53     geo_short_address      Nottingham
       53        _Company            Ledgemonkey

したがって、meta_key_Companyがに存在する場合にのみノッティンガムを返したいpost_id

DBには、メタキーを持たない他のエントリがあります。_Companyそれらは、除外したいものです...?

いろいろ試してみましたが、組み合わせが取れないようです。

4

1 に答える 1

1

質問を言い換えると、postmetaテーブルを複数の基準でフィルタリングする必要があります。このようなことをする必要があります(meta_key基準を含めるように編集します)。

SELECT whatever
  FROM $wpdb->postmeta.meta_value
 WHERE 1=1
   AND $wpdb->postmeta.post_id IN (
             SELECT distinct $wpdb->postmeta.post_id
               FROM $wpdb->postmeta
              WHERE $wpdb->postmeta.post_value = 'Ledgemonkey'
                AND $wpdb->postmeta.meta_key = '_Company'
             )
   AND $wpdb->postmeta.meta_key = 'geo_short_address'

ポストメタ行が数万行ある場合、これはパフォーマンスのヘアボールになる可能性がありますが、機能します。

ちなみに、implode()関数を賢く使うことで、その醜いが取るに足らない1=1を取り除くことができます。

于 2012-11-21T13:11:13.817 に答える