Php 两个几乎相同的查询,一个有效,另一个无效,怎么了?

Php 两个几乎相同的查询,一个有效,另一个无效,怎么了?,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我有两个几乎相同的查询。一个在某个时间戳之前检查帖子,另一个在某个时间戳之后检查pts。但是,用于将来发布的日志具有所有必要的值,并且用于创建指向这些事件的链接,其中用于先前发布的日志由于某些原因没有: 代码如下: $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year FROM $wpdb->posts LEFT OUTER JOIN $wpd

我有两个几乎相同的查询。一个在某个时间戳之前检查帖子,另一个在某个时间戳之后检查pts。但是,用于将来发布的日志具有所有必要的值,并且用于创建指向这些事件的链接,其中用于先前发布的日志由于某些原因没有:

代码如下:

    $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
    FROM $wpdb->posts
    LEFT OUTER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
    LEFT OUTER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    LEFT OUTER JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id =$wpdb->terms.term_id )
    WHERE ( $wpdb->posts.post_date < '$thisyear-$thismonth-01'
    AND $wpdb->terms.slug = 'events'
    AND $wpdb->posts.post_status = 'publish'
    AND $wpdb->posts.post_type = 'post')
        ORDER BY post_date DESC
        LIMIT 1");


$next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
    FROM $wpdb->posts
    LEFT OUTER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) 
    LEFT OUTER JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    LEFT OUTER JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id =$wpdb->terms.term_id )
    WHERE ( $wpdb->posts.post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
    AND $wpdb->terms.slug = 'events'
    AND $wpdb->posts.post_status = 'publish'
    AND $wpdb->posts.post_type = 'post')
        ORDER BY post_date ASC
        LIMIT 1");
以下是使用这些值的代码:

    <tr>';

if ( $previous ) {
    $calendar_output .= "\n\t\t".'<td colspan="3" id="prev"><a href="' . get_month_link($previous->year, $previous->month) . '" title="' . esc_attr( sprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($previous->month), date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year)))) . '">&laquo; ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '</a></td>';
} else {
    $calendar_output .= "\n\t\t".'<td colspan="3" id="prev" class="pad">&nbsp;</td>';
}

$calendar_output .= "\n\t\t".'<td class="pad">&nbsp;</td>';

if ( $next ) {
    $calendar_output .= "\n\t\t".'<td colspan="3" id="next"><a href="' . get_month_link($next->year, $next->month) . '" title="' . esc_attr( sprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($next->month), date('Y', mktime(0, 0 , 0, $next->month, 1, $next->year))) ) . '">' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' &raquo;</a></td>';
} else {
    $calendar_output .= "\n\t\t".'<td colspan="3" id="next" class="pad">&nbsp;</td>';
}

$calendar_output .= '
</tr>
总结:


怎么了

很难从给出的内容中分辨出来,但我猜“date”字段类型严格来说是date,而在第二个查询中,您试图将其用作某种datetime。就像它可以是yyyy-mm-dd,但不能是yyy-mm-dd-hh:mm:ss。 另一种猜测是,这不是特定于SQL的,例如未设置$last_day或字符串格式错误等

无论如何,请考虑以下两个建议:

使用MWE最小工作示例。我几乎可以肯定,如果你删掉所有的连接和其他东西,错误仍然会存在。也就是说,只需将其缩小为从表中选择*,其中$wpdb->posts.post_date>“$thisyear-$thismonth-{$last_day}23:59:59”。 很抱歉,代码的第二部分对于判断错误完全没有用处。很明显,若查询并没有返回任何数据,使用这些缺失的数据将导致错误。最好包括第一个查询的原始结果和第二个查询的结果/错误。
为什么你要在其中一个日期上加时间,而不在另一个日期上加时间?这可能就是你的错误所在$今年-$thismonth-{$last_day}23:59:59您需要{}大约$last_day吗?你需要时间还是只需要日期?我更喜欢使用>=$thisyear-$nextmonth-01保持代码干净。请注意,除了一个例外,左连接x,其中x与内部连接x相同,其中x。此答案没有用处,因为这已在10分钟前的注释中指定