我有两个自定义字段:
meta_key1
是布尔值(0
或1
).meta_key2
是日期值-20150623
例如meta_key2 字段具有显式值。看起来他们被视为一个空字符串\'\'
.我想找到所有有
meta_key2
(日期)值大于今天或具有meta_key1
值为true。这是我希望它们显示的顺序。
key2.meta_value >= today ASC
key1.meta_value = TRUE ordered by date ASC
(先给出日期的)0 因此,首先进入ASC
顺序我尝试使用COALESCE
为了解释这一点,我已经取得了一些成功,但有一点让我很困惑。我找不到key1.meta_value = FALSE
和key2.meta_value is >= today
在中显示ASC
顺序我的问题是:
我不确定我的$meta_key1 = \'prog_ongoing\'; $meta_key2 = \'prog_date_start\'; $start_date = date(\'Ymd\'); $postids = $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT key1.post_id FROM $wpdb->postmeta key1 INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %s WHERE key1.meta_key = %s AND key1.meta_value is TRUE OR key2.meta_value >= %d ORDER BY COALESCE(NULLIF(key1.meta_value, 0), 0) DESC, COALESCE(NULLIF(key2.meta_value, \'\'), $start_date) ASC, key2.meta_value ASC ", $meta_key2, $meta_key1, $start_date ) );
COALESCE
上的声明key1.meta_value
正在做任何事。感谢您对此的任何见解。