如何使用wpdb select语句Wordpress从wp_postmeta表中的多行中进行选择

时间:2012-11-21 12:26:47

标签: mysql wordpress

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

   $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

因此,如果_Company

中存在meta_key post_id,我只想返回诺丁汉

数据库中还有其他条目没有meta_key _Company它们是我要排除的那些......?

我尝试了各种各样的东西但似乎无法获得组合......?

1 个答案:

答案 0 :(得分: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。