具有多个元值的自定义选择查询(排序问题)

时间:2012-05-08 作者:Russell Slater

我有两个自定义的meta值,用于事件列表,除了排序之外,几乎所有东西都工作得很好。我有两个日期(event\\u date和event\\u enddate)。其中一个是始终存在的开始日期,另一个是仅在需要时使用的结束日期。我创建了一个查询,其中列出了所有这些字段等于或大于今天日期的日期,效果很好。但是,我希望所有事件都只按event\\u date字段排序。我该怎么做?我花了一整天的时间试图做这件事,但就是做不出来!

这是我的代码:

SELECT DISTINCT wposts.*
FROM $wpdb->posts wposts
LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE ((wpostmeta.meta_key = \'event_enddate\' AND wpostmeta.meta_value >= CURDATE())
 OR (wpostmeta.meta_key = \'event_date\' AND wpostmeta.meta_value >= CURDATE()))
AND wposts.post_status = \'publish\'
AND $wpdb->term_taxonomy.taxonomy = \'category\'
AND $wpdb->term_taxonomy.term_id IN(15)
AND wposts.post_status = \'publish\'
ORDER BY wpostmeta.meta_value ASC

1 个回复
SO网友:Milo

我相信你可以通过WP_Query 并避免使用自定义SQL:

$today = date( \'Y-m-d\' );
$args = array(
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'category\',
            \'field\' => \'ID\',
            \'terms\' => 15
        )
    ),
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => \'event_enddate\',
            \'value\' => $today,
            \'compare\' => \'>=\'
        )
    ),
    \'meta_key\' => \'event_date\',
    \'meta_value\' => $today,
    \'meta_compare\' => \'>=\',
    \'orderby\' => \'meta_value_num\'
);
$events = new WP_Query( $args );

结束

相关推荐

如何扩展WP_QUERY以在查询中包含自定义表?

这个问题我已经讨论了好几天了。最初的问题是,如何将用户的关注者数据存储在数据库中,我在WordPress Answers上得到了一些不错的建议。之后,根据建议,我添加了如下新表:id leader_id follower_id 1 2 4 2 3 10 3 2 10 在上表中,第一行有一个ID为2的用户,后面跟着一个ID为4的用户。在第二行中,ID为3的用户后面跟着ID为10的用户。同样的逻辑适