2012-04-16 123 views
0

我有以下的MySQL從幾個表fecthes數據:MySQL查詢突然不再起作用

SELECT * FROM $wpdb->posts 
    LEFT JOIN taxi ON ($wpdb->posts.ID = taxi.taxiID) 
    LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
    WHERE $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'post' 
    AND $wpdb->posts.post_date < NOW()+INTERVAL 1 DAY 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN(3) 
    AND taxi.taxiID IS NULL 
    AND ($wpdb->postmeta.meta_key = 'EndDate' AND $wpdb->postmeta.meta_value > DATE_ADD(NOW(), INTERVAL 3 HOUR)) 

截至昨日,該查詢不返回任何結果,但這裏的起腳:它用於將所有返回結果兩週的時間!

大量的試驗和錯誤之後,我已經將問題範圍縮小到這一行:

AND taxi.taxiID IS NULL 

這條線被認爲導致測試結果進行過濾,只顯示那些不帖子在出租車桌上有記錄。

任何人都可以幫我弄清楚如何解決這個問題嗎?

+0

爲什麼有人降低這個?這是一個合法的問題!刪除該行代碼將顯示結果,但結果不會被過濾。應用該篩選器會殺死網站上的所有結果,但不會在PHP中處理我的管理員。問題是,爲什麼? – Sweepster 2012-04-16 02:51:41

+1

您是否在HEREDOC中查詢?我在這段代碼中缺少了很多上下文。 – 2012-04-16 02:52:18

+0

我甚至不知道HEREDOC是什麼。簡單的說,這個MySQL查詢以前工作過,現在沒有。我從未觸及過查詢。我不明白爲什麼它在服務器上工作,但不在php文件的上下文中。 – Sweepster 2012-04-16 04:53:51

回答

0

如果此查詢處於heredoc中,請明確指定插值。 http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

$query = <<<HERE 
SELECT * FROM {$wpdb->posts} 
    LEFT JOIN userContests ON ({$wpdb->posts}.ID = taxi.taxiID) 
    LEFT JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id) 
    LEFT JOIN {$wpdb->term_taxonomy} ON ({$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id) 
    WHERE {$wpdb->posts}.post_status = 'publish' 
    AND {$wpdb->posts}.post_type = 'post' 
    AND {$wpdb->posts}.post_date < NOW()+INTERVAL 1 DAY 
    AND {$wpdb->term_taxonomy}.taxonomy = 'category' 
    AND {$wpdb->term_taxonomy}.term_id IN(3) 
    AND ({$wpdb->postmeta}.meta_key = 'EndDate' AND {$wpdb->postmeta}.meta_value > DATE_ADD(NOW(), INTERVAL 3 HOUR)) 
HERE 
0

難道你的PHP腳本超時正在發生? 請記住,只是b/c SQL查詢不會改變,並不意味着數據也不會。如果查詢太複雜或數據太多,可能會導致超時。這可以解釋爲什麼它在phpmyadmin中有效,但不能解釋你的PHP腳本。 phpmyadmin增加了一個LIMIT子句,允許mysql服務器只返回一小部分結果,因此很少超時。

嘗試將max_execution_time設置爲更高的值。

ini_set('max_execution_time', 300); //300 seconds = 5 minutes