【问题标题】:In wordpress I need to do a sort then a where clause... but I can't get it working在wordpress中,我需要先做一个排序然后是where子句......但我无法让它工作
【发布时间】:2013-06-04 12:58:13
【问题描述】:

我有一个需要按时间顺序排列的帖子列表。这些字段都是自定义的,我正在使用 Advance 自定义字段插件,但这无关紧要。

我要做的是首先按日期对项目进行排序,然后执行小于或等于今天日期的操作,然后将其限制为一个。从高层次的角度来看,我试图从帖子列表中获取下一个事件(事件 = 1 个帖子)。

我环顾四周并尝试了一些示例,但似乎没有正确排序它们。日期以长文本形式存储在数据库中,格式为 20130609 yyyymmdd。

我的 WP_Query:

$type = 'round';
$date = date('Ymd');
print $date;
$args=array(
  'post_type' => $type,
  'post_status' => 'publish',
  'posts_per_page' => 1,
  'meta_key' => 'race_date',
  'meta_compare' => '<=',
  'meta_value' => '20130603', //Test date
  'orderby_meta_key' => 'race_date',
  'orderby_order'    => 'ASC',
);

提前谢谢,如果你知道答案,你介意解释一下,因为我认为这个问题已经出现了很多次,但只适用于这个问题,而不是普遍适用。

:)

【问题讨论】:

  • 您无法使用 orderby => 'date' 进行查询吗?
  • 那是发布日期,而不是比赛日期。

标签: mysql wordpress custom-fields


【解决方案1】:

看起来您的meta_value 是一个字符串,这就是&lt;= 不起作用的原因。尝试将参数作为整数传递并添加type =&gt; 'NUMERIC',这会将您的数据库存储字符串作为数字处理。

编辑:看起来你也可以在你的情况下使用DATE作为type[codex]

【讨论】:

  • 我试过这个:'meta_query' => array(array('key' => 'race_date', 'value' => 20130605, 'type' => 'numeric', 'compare ' => '
  • 如果不是第一个,您期望的结果是什么?
  • 所以基本上我可以通过正常工作来获得订单。按其比赛日期字段对每个帖子进行排序。然后我想返回最近的尚未发生的事件,那是行不通的。
  • 我想我需要在 MySQL 中检查查询输出
  • 嗯……首先,如果您想要第一场尚未发生的比赛并且您将今天的日期输入meta_value,那么您的meta_compare 必须是&gt;= 而不是&lt;=因为未来的日期大于今天的日期。试试这个,让我知道会发生什么。
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 2016-07-07
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
相关资源
最近更新 更多