2013-08-04 33 views
0

我试图通过WordPress运行MySQL查询,带回我想删除的帖子列表,因为他们没有“喜欢”投票(使用别人的插件数据)。该查询在phpMyAdmin中完美工作,但在通过WP运行时出现语法错误......我完全没有理由这么做。自定义WordPress查询奇怪的MySQL错误

这里的查询代码,检查岗位超过30天没有相应的“像”,在wti_like_post条目(无论正或负):

$novotesquery = "SELECT * FROM $wpdb->posts 
       WHERE $wpdb->posts.post_type = 'post' 
       AND $wpdb->posts.post_status = 'publish' 
       AND $wpdb->posts.post_date < DATE_SUB(NOW(), INTERVAL 30 DAY) 
       AND $wpdb->posts.ID NOT IN 
       (SELECT DISTINCT post_id FROM $wpdb->wti_like_post)" ; 
$result = $wpdb->get_results($novotesquery); 

语法错误说,有一个问题就SQL的最后一行(括号中的SELECT):“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获得在第6行''附近使用的正确语法'”。

当我在phpMyAdmin中运行查询(用表前缀替换“$ wpdb->”)时,它会起作用。如果有人可以告诉我为什么SQL查询将在服务器上运行,而不是在WP中运行,那么我会很感激。

在此先感谢。

+0

wp_wti_like_post在标准安装 - 它取决于配置中定义的数据库前缀。 –

+0

感谢评论和回答,我发现什么是错的。像往常一样,假设是所有拧紧的母亲! 我假设“$ wpdb-> wti_like_post”转换为“DBprefix_wti_like_post”,因为“$ wpdb-> posts”转换为“DBprefix_posts”。我的假设是错误的。据我所知,它根本不会转换为任何东西,大概是因为它不是内置的WordPress表格。 需要的是“** {$ wpdb-> prefix} wti_like_post **”,这会强制数据库前缀到位。 现在有效。 非常感谢两位评论员提出的心理提示,询问价值如何出现! –

回答

0

也许它只是一个防守括号

$novotesquery = "SELECT * FROM {$wpdb->posts} 
       WHERE {$wpdb->posts}.post_type = 'post' 
       AND {$wpdb->posts}.post_status = 'publish' 
       AND {$wpdb->posts}.post_date < DATE_SUB(NOW(), INTERVAL 30 DAY) 
       AND {$wpdb->posts}.ID NOT IN 
       (SELECT DISTINCT post_id FROM {$wpdb->wti_like_post})" ; 

的事情或许你应该使用wpdb- $>查询方法,而不是get_results最后,也许wti_like_posts尚未您的代码运行时宣布。

在“$ result”行之前死($ novotesquery)怎么办?