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

标签 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

因此,如果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/

相关文章:

mysql - 更新一个表并从另一个表插入数据

mysql - 准备好的语句 Insert With Select 两个表

wordpress - Elementor - 在 <head> 标签之后添加自定义代码

javascript - JS 错误导致 WordPress 插件无法工作

php - orWhere 在 Laravel 查询生成器中查询

mysql - Rails 不等于 current_user 总是没有结果

mysql - SQL 查询 - 从以逗号分隔的一列中获取数据

wordpress - HTTP header 在非 www URL 上返回 404?

wordpress - 如何生成WordPress插件安装链接

php - 自定义帖子类型等效于 Wordpress 中的 "Posts Page"设置