2013-08-04 72 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)怎麼辦?