我正在尝试查询WordPress帖子并通过自定义meta键对其进行排序。这是我的查询:
SELECT distinct wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.ID = wpostmeta.post_id
AND wpostmeta.meta_key = 'closed'
AND wpostmeta.meta_value = '1'
AND wposts.post_status = 'publish'
AND wposts.post_type = 'auction'
ORDER BY (wpostmeta.meta_value AND wpostmeta.meta_key = 'end_date') ASC
LIMIT 10
这为我获取了我想要的帖子,但是它没有通过meta键“ end_date”对其进行排序。我也尝试了以下格式:
$args = array(
'post_type' => 'auction',
'post_status' => 'publish',
'posts_per_page' => 10,
'meta_key' => 'end_date',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'closed',
'value' => '1',
'compare' => '=',
)
)
);
$closed_auctions = new WP_Query( $args );
但是,这将以随机顺序返回帖子,其数量超过10,并且重复了很多次。
另外,我要订购的字段是日期,格式为MM / DD / YYYY,但我认为它以长文本形式存储。订购前我必须进行任何转换吗?
您可以使用STR_TO_DATE将DD / MM / YYYY转换为可以订购的MySQL日期。理想情况下,您将更改日期在数据库中的存储方式,但是如果不是这样,请使用:
ORDER BY ( STR_TO_DATE( wpostmeta.meta_value, '%d/%m/%Y' ) AND wpostmeta.meta_key = 'end_date' ) ASC
进一步阅读:http : //dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句