0

我有以下 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

该行应该使结果过滤以仅显示出租车表中没有记录的那些帖子。

谁能帮我弄清楚如何解决这个问题?

4

2 回答 2

0

会不会是您的 PHP 脚本超时了?请记住,只是 b/c SQL 查询不会改变,并不意味着数据也不会改变。如果查询太复杂或数据太多,它肯定会导致超时。这可以解释为什么它在 phpmyadmin 中有效,但在您的 PHP 脚本中无效。phpmyadmin 添加了一个 LIMIT 子句,允许 mysql 服务器只返回一小部分结果,因此很少超时。

尝试将 max_execution_time 设置为更高的值。

ini_set('max_execution_time', 300); //300 seconds = 5 minutes
于 2012-04-16T06:47:50.943 回答
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
于 2012-04-16T02:57:45.500 回答