php - 如何在 WordPress MySQL 查询中按元键值排序?

标签 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,但我相信它存储为长文本。我需要在订购前进行任何转换吗?

最佳答案

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

关于php - 如何在 WordPress MySQL 查询中按元键值排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825717/

相关文章:

php - 如何在wordpress中正确添加页面模板?

javascript - 使用 DOMparser 进行 Web 抓取时的数组输出问题

javascript - 在 Angular Material 中提交选择选项值

php - 如何选择表格的某些列?

php - Wordpress 自定义帖子类型类别

css - Wordpress 并没有提取超棒的字体

php - 仅当模型属性为空或空白时才更新 `create_at` 模型属性

php - 放置 PHP 的 MySQL 连接详细信息的最安全位置在哪里

PHP select - 浏览器和二维码阅读器的不同值

php - 花点时间在 Accordion 里