获取用户META_KEY的元值数组

时间:2015-04-14 作者:LBF

我需要获取用户meta\\u键的所有meta\\u值的数组。我找到了以下代码:

$cities = $wpdb->get_col("SELECT meta_value FROM $wpdb->usermeta WHERE meta_key = \'my_cities_meta_key\'" );
其结果是:

array(3) { [0]=> string(8) "Chicago" [1]=> string(8) "New York" [2]=> string(8) "New York" }
这不正是我需要的。查看纽约值如何列出两次,因为有两个用户位于纽约?我需要一个数组,列出每个唯一的meta\\u值一次。像这样:

$cities = array(New York, Chicago, Los Angeles);
我如何做到这一点?

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

您只需添加DISTINCT 到您的SQL查询,类似于:

$cities = $wpdb->get_col("SELECT DISTINCT(meta_value) FROM $wpdb->usermeta WHERE meta_key = \'my_cities_meta_key\'" );
或者,如果出于某种原因希望使用php执行此操作(如果希望知道一个城市在只显示唯一条目之前会列出两次)

$cities = $wpdb->get_col("SELECT meta_value FROM $wpdb->usermeta WHERE meta_key = \'my_cities_meta_key\'" );
$cities = array_keys(array_flip($cities));
如果您只想使用SQL根据用户角色进行筛选,类似的方法应该可以实现,但有点不太成熟,因为WP将用户角色存储在序列化数组中:

$cities = $wpdb->get_col("SELECT Distinct(c.meta_value) 
    FROM $wpdb->usermeta AS r 
    INNER JOIN $wpdb->usermeta AS c
      ON r.user_id = c.user_id
    WHERE r.meta_value LIKE \'%subscriber%\'
    AND c.meta_key = \'my_cities_meta_key\'");
要添加基于多个元键的过滤器,需要执行更多操作INNER JOIN, e、 g.对于您的区域元键:

$cities = $wpdb->get_col("SELECT Distinct(c.meta_value) 
    FROM $wpdb->usermeta AS r 
    INNER JOIN $wpdb->usermeta AS c
      ON r.user_id = c.user_id
    INNER JOIN $wpdb->usermeta AS re
      ON r.user_id = re.user_id
    WHERE r.meta_value LIKE \'%subscriber%\'
    AND c.meta_key = \'my_cities_meta_key\'
    AND re.meta_key = \'region\'");

结束

相关推荐

$wpdb->查询无法插入数据

我编写代码将数据保存在Wordpress数据库表中(表名为wp\\U fafa)但无法在中保存数据$qry = $wpdb->query( \"INSERT INTO `wp_fafa` (titile,liveprice,changing,lowest,topest,time) VALUES (\'\" . trim($row->item(0)->nodeValue) . \"\',\'\" . trim($row->item(2)->nodeValue) . \"\',\