如何显示meta_Value数组?

时间:2015-06-22 作者:CharlesStamp

我试图将元数据与特定查询匹配的所有帖子的列表放在一起。在我尝试输出数据之前,它似乎工作得很好,在这一点上它会不断重复。

我希望它能显示出来16 23 但事实上16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23

代码如下:

<?php
global $wpdb;
$results =$wpdb->get_results("SELECT post_id FROM $wpdb->posts , $wpdb->postmeta where  $wpdb->postmeta.meta_value = \'2015/06/03\'

AND meta_key=\'mymvkey\'", OBJECT);

foreach ($results as $result){
print_r ($result->post_id);
}
?>
我仍在努力掌握处理数组的诀窍(不仅仅是在php中),因此这可能是我的错误所在。但我读到的每一篇帖子都表明这应该是可行的。有没有办法停止重复,只显示一次数据?

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

您想要的SQL是:

$sql = "
  SELECT DISTINCT post_id 
  FROM $wpdb->posts, $wpdb->postmeta 
  where $wpdb->postmeta.meta_value = \'2015/06/03\'";
$results =$wpdb->get_results($sql);
但没有理由让$wpdb->posts 表,因为post_id 值为a$wpdb->postmeta 表列。

$sql = "
  SELECT DISTINCT post_id 
  $wpdb->postmeta 
  where $wpdb->postmeta.meta_value = \'2015/06/03\'";
$results =$wpdb->get_col($sql);
请注意,我已更改$wpdb->get_resultswpdb->get_col 因为您只返回一列数据。结果出来后需要更少的操作。

您也可以跳过DISTINCT 并使用PHParray_unique():

$sql = "
  SELECT post_id 
  $wpdb->postmeta 
  where $wpdb->postmeta.meta_value = \'2015/06/03\'";
$results =$wpdb->get_col($sql);
$results = array_unique($results);
然而,更正确的方法是WP_Query. 我本想提出这个建议,但后来注意到您并不是在寻找meta_key 但我们正在搜索整张表。That is going to cause trouble eventually. 假设某个插件将数据存储在$wpdb->postmeta 具有该日期格式的表?然后,您的代码也将检索这些值,这肯定不是预期的行为。有人甚至可以从stock post编辑面板中输入这样的日期作为自定义字段。您应该指定一个键,类似于:

$args = array(
  \'fields\' = \'ids\',
  \'ignore_sticky_posts\' => true,
  \'meta_query\' => array(
    array( 
      \'key\' => \'my_date_key\',
      \'value\' => \'2015/06/03\',
    )
  )
);
$pids = new WP_Query($args);

结束

相关推荐

从phpMyAdmin创建新用户

我正在尝试将我在免费web托管服务器中创建的站点复制到我在WAMP上运行WP的windows pc上。我复制了所有文件,但采用了wp配置。php来自我在PC上运行的示例站点,并对其中的db连接进行了一些修改。复制的网站以某种方式在我的电脑上运行,但现在我需要访问wp管理员。我不知道为什么我不能用用户名登录并通过,这在免费主机中非常有效。我决定从phpMyAdmin页面创建新用户。但如何处理密码生成?系统对空的那个感到愤怒。如果我从PC上运行的另一个站点导出用户并导入到当前表(wp\\U users),则无