0

我有一个这样的选择语句:

   $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

数据库中还有其他条目没有 meta_key_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'

如果你有数万个 postmeta 行,这可能有点像性能毛球,但它会起作用。

implode()顺便说一句,您可以通过明智地使用该函数来摆脱那个丑陋但无关紧要的 1=1 。

于 2012-11-21T13:11:13.817 回答