0

我正在尝试通过 WordPress 运行 MySQL 查询,以返回我想要删除的帖子列表,因为它们没有“喜欢”投票(使用其他人的插件数据)。该查询在 phpMyAdmin 中运行良好,但是当我通过 WP 运行它时会出现语法错误......而且我认为它绝对没有理由这样做。

这是查询代码,它检查超过 30 天且在 wti_like_post 中没有相应“like”条目的帖子(无论是正面的还是负面的):

$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 中运行,我将不胜感激。

提前致谢。

4

1 回答 1

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->query 方法而不是 get_results 最后,也许 wti_like_posts 在您的代码运行时尚未声明。

那么在“$result”行之前的 die($novotesquery) 呢?

于 2013-08-04T18:27:49.227 回答