2012-04-16 9 views
0

に動作します私は、次のMySQLを持っていない:昨日のよう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)) 

は、クエリは結果を返しますが、ここでキッカーですされていません:それはすべての結果を返すために使用しました2週間の時間!

試行錯誤の多くの後、私はこの1つのラインにまで問題を狭めてきました:

AND taxi.taxiID IS NULL 

ラインは結果がないだけで、それらの投稿を表示するようにフィルタリングする原因になるとされていることタクシーのテーブルに記録があります。

問題を解決する方法をお手伝いできますか?

+0

誰がこれをダウンさせたのですか?これは正当な質問です!そのコード行を削除すると結果が表示されますが、結果はフィルタリングされません。そのフィルタを適用すると、PHPの管理者ではなく、サイトのすべての結果が強制終了されます。問題は、なぜですか? – Sweepster

+1

あなたの質問はHEREDOCですか?私はこのコードで多くの文脈を欠いています。 –

+0

私はHEREDOCが何であるか知りません。これは単に、このMySQLクエリが以前はうまくいきましたが、今はそうではありません。私はその質問に決して触れなかった。私はなぜそれがサーバー上で動作しますが、PHPファイルのコンテキストでは理解しません。 – Sweepster

答えて

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スクリプトのタイムアウトが発生している可能性がありますか? SQLクエリーが変わらないだけで、データが変わらないことを覚えておいてください。クエリが複雑すぎる場合や、データが多すぎる場合は、タイムアウトが発生する可能性があります。これはphpmyadminで動作する理由を説明しますが、PHPスクリプトでは説明しません。 phpmyadminはLIMIT句を追加します。これにより、mysqlサーバは結果のほんの一部を返すことができ、タイムアウトすることはめったにありません。

max_execution_timeをさらに高く設定してみてください。

ini_set('max_execution_time', 300); //300 seconds = 5 minutes 
関連する問題