Get only used meta_values

时间:2013-08-22 作者:Toni Michel Caubet

这就是我获取元值的方式:

$apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = \'postal_location\' ORDER BY meta_value ASC" );
这是我获取自定义帖子类型的已发布帖子的方式:

$apartments = $wpdb->get_col( "
                SELECT DISTINCT( post_id ) 
                FROM $wpdb->postmeta 
                WHERE meta_key IN( $fields_string ) AND 
                      post_id IN ( SELECT ID FROM $wpdb->posts 
                      WHERE post_type = \'tvr_apartment\' AND 
                            post_status = \'publish\' ) ORDER BY rand() " );
所以我关心的是

如何仅从至少1篇已发布帖子使用的meta\\u值中获取meta\\u值?

知道怎么做吗?

-编辑-

我之所以这样做是因为第一个查询返回未使用的元:

enter image description here

3 个回复
最合适的回答,由SO网友:simonthesorcerer 整理而成

我不确定你的问题是否正确,因此不知道这个答案是否正确。。。这就是你想要实现的吗?

$apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta AS wppm
    LEFT JOIN $wpdb->posts AS wpp ON wppm.post_id = wpp.ID
    WHERE wppm.meta_key = \'postal_location\' AND wpp.post_status = \'publish\'
    ORDER BY wppm.meta_value ASC" );

SO网友:sri

我认为你在这里做得不对。为什么不使用WP\\u查询?它会以任何你想要的方式给你发帖子,从返回的帖子中你可以得到你的元值。

$params = array(
    \'post_type\' => \'your post type\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 10,
    \'meta_key\' => \'your key\',
    \'meta_value\' => \' \',
    \'meta_compare\' => \'!=\',
    \'ignore_sticky_posts\' => 1,
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\'
);
$new_query = new WP_Query($params);
像这样的过滤应该会立即为您提供所有使用meta\\u键的帖子。希望这有帮助!

*更新时间:Here 是codex本身中使用多个自定义字段进行查询的示例。除非有数百个字段,否则这种方法应该非常有效。此外,如果您正在编写SQL查询,则必须对其进行优化,以使其不会成为性能瓶颈。

SO网友:Ciprian

尝试WHERE meta_value != \'\' 检查空值。

这应该是您的最终查询:

$apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = \'postal_location\' AND meta_value != \'\' ORDER BY meta_value ASC" );

编辑:此查询应帮助您获取所需的值,以便您可以将其与检索后查询相结合。

结束

相关推荐

PUBLISH_POST操作挂接不工作

我这里有一个非常简单的问题,我相信解决方案会非常简单。代码如下:function the_fat_lady_sings() { echo \'this plugin is a far harder than i imagined\'; } add_action( \'publish_post\',\'the_fat_lady_sings\' ); 我只是想重复这句话,但它根本不起作用。请帮忙,我不知道怎么了。如果我使用init 而不是publish_post, 它