2012-04-16 93 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