如何通过WordPress MySQL查询中的元键值进行排序?

时间:2015-06-14 03:35:08

标签: php mysql wordpress

我试图查询WordPress帖子并通过自定义元键对其进行排序。这是我的查询:

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

这会收到我想要的帖子,但它不会通过元键' 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,但我相信它存储为长篇文章。订购前我是否需要进行任何转换?

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

我不确定您是否可以使用MM / DD / YYYY格式对值进行实际排序。看起来您希望将某种日期存储为元值 - 为什么您没有使用timestamp?使用时间戳时,您可以使用" meta_value_num"轻松排序。作为" orderby"的值(见WP Query Documentation)。