我有一个像这样的选择语句:
$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
post_id
,我只想返回诺丁汉
数据库中还有其他条目没有meta_key _Company
它们是我要排除的那些......?
我尝试了各种各样的东西但似乎无法获得组合......?
答案 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。