我有一个这样的选择语句:
$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
因此,如果post_id
中存在meta_key _Company
,我只想返回诺丁汉
数据库中还有其他条目没有元键_Company
,它们是我想要排除的条目......?
我尝试了各种方法,但似乎无法获得组合..?
最佳答案
为了重申您的问题,您希望根据多个条件过滤 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。
关于mysql - 如何使用 wpdb select 语句从 wp_postmeta 表中的多行中进行选择 WordPress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13493264/