如何在WordPress的SQL查询中对季节学期字符串按时间排序?
解决WordPress中学期字符串的时间排序问题
数据库里的学期以Spring 2020、Fall 2018这类字符串存储,默认SQL排序会按字母顺序排列,没法满足时间顺序的需求。你可以通过给学期分配排序权重,结合年份排序来实现目标,修改后的查询代码如下:
$wpdb->prepare("SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id WHERE pm.meta_key = '%s' AND pm.meta_value IS NOT NULL AND p.post_status = 'publish' ORDER BY SUBSTRING_INDEX(pm.meta_value, ' ', -1) ASC, CASE WHEN pm.meta_value LIKE 'Spring%' THEN 1 WHEN pm.meta_value LIKE 'Summer%' THEN 2 WHEN pm.meta_value LIKE 'Fall%' THEN 3 END ASC", "semester")
代码说明:
SUBSTRING_INDEX(pm.meta_value, ' ', -1):提取字符串中最后一个空格后的内容(也就是年份部分),按年份升序排列。CASE语句:给不同学期分配排序优先级,确保同一年份内按Spring→Summer→Fall的时间顺序排列。
执行后输出的排序结果会是:
Spring 2018 Summer 2018 Fall 2018 Spring 2019 Summer 2019 Fall 2019
内容的提问来源于stack exchange,提问作者IUWPDEV
相关产品推荐
相关产品推荐

