0

我有以下查询,在 oracle 数据库中应该可以工作,但当前的 wordpress 安装使用 mysql 数据库。你能帮我重写下一个查询,以便它可以在 mysql 上运行吗?

$wpdb->get_results("SELECT a.ID, a.post_title, DAYOFMONTH(b.meta_value) as dom "
."FROM $wpdb->posts a, $wpdb->postmeta b "
."WHERE b.meta_value >= '{$thisyear}-{$thismonth}-01 00:00:00' "
."AND b.meta_value <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' "
."AND a.post_type = 'post' AND a.post_status = 'publish' AND a.ID = b.postid AND   b.meta_key='Event Date'"
);
4

2 回答 2

0

您可能对常量的日期格式有疑问。我建议使用 . 将日期转换为相同的格式to_char()。我在想一些事情:

SELECT a.ID, a.post_title, to_char(b.meta_value, 'DD') as dom "
."FROM $wpdb->posts a, $wpdb->postmeta b "
."WHERE to_char(b.meta_value, 'YYYY-MM-DD HH:MI:SS') >= '{$thisyear}-{$thismonth}-01 00:00:00' "
."AND to_char(b.meta_value, 'YYYY-MM-DD HH:MI:SS') <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' "
."AND a.post_type = 'post' AND a.post_status = 'publish' AND a.ID = b.postid AND   b.meta_key='Event Date'

或者,更简单地说:

SELECT a.ID, a.post_title, to_char(b.meta_value, 'DD') as dom "
."FROM $wpdb->posts a, $wpdb->postmeta b "
."WHERE to_char(b.meta_value, 'YYYY-MM') = '{$thisyear}-{$thismonth}' "
."AND a.post_type = 'post' AND a.post_status = 'publish' AND a.ID = b.postid AND   b.meta_key='Event Date'

这假定meta-value存储为日期。如果没有,您必须处理将值转换为日期。我做出这个假设是因为你正在使用一个函数DAYOFMONTH

于 2013-03-19T21:13:42.330 回答
0

据我所知,您在 MySQL 中的查询没有问题。以下两个语句产生相同的结果(尽管我更喜欢使用JOIN)。这是一个简化版本:

SELECT  *
FROM table1 t 
    JOIN table2 t2 on t.id = t2.id
WHERE t.dt >= '2011-01-02 00:00:00';

SELECT  *
FROM table1 t, table2 t2
WHERE t.dt >= '2011-01-02 00:00:00' 
   AND t.id = t2.id;

SQL 小提琴演示

于 2013-03-19T20:38:32.530 回答