【发布时间】:2013-08-04 18:19:58
【问题描述】:
我正在尝试通过 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 中运行,我将不胜感激。
提前致谢。
【问题讨论】:
-
wp_wti_like_post 标准安装 - 它取决于配置中定义的数据库前缀。
-
感谢评论和回答,我发现了问题所在。像往常一样,假设是所有错误的根源!我假设“$wpdb->wti_like_post”转换为“DBprefix_wti_like_post”,因为“$wpdb->posts”转换为“DBprefix_posts”。我的假设是错误的。据我所知,它根本不会转换为任何东西,大概是因为它不是内置的 WordPress 表。需要的是“{$wpdb->prefix}wti_like_post”,它强制 DB 前缀到位。现在可以了。非常感谢两位评论者提出的精神提示,询问价值是如何产生的!