More efficient calendar queries. fixes #8351. props vladimir_kolesnikov

git-svn-id: http://svn.automattic.com/wordpress/trunk@15585 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
markjaquith 2010-09-07 04:22:56 +00:00
parent e7c4ac4014
commit 722fde708c
1 changed files with 9 additions and 11 deletions

View File

@ -1114,20 +1114,20 @@ function get_calendar($initial = true, $echo = true) {
} }
$unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear);
$last_day = date('t', $unixmonth);
// Get the next and previous month and year with at least one post // Get the next and previous month and year with at least one post
$previous = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts FROM $wpdb->posts
WHERE post_date < '$thisyear-$thismonth-01' WHERE post_date < '$thisyear-$thismonth-01'
AND post_type = 'post' AND post_status = 'publish' AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC ORDER BY post_date DESC
LIMIT 1"); LIMIT 1");
$next = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts FROM $wpdb->posts
WHERE post_date > '$thisyear-$thismonth-01' WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
AND MONTH( post_date ) != MONTH( '$thisyear-$thismonth-01' )
AND post_type = 'post' AND post_status = 'publish' AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date ASC ORDER BY post_date ASC
LIMIT 1"); LIMIT 1");
/* translators: Calendar caption: 1: month name, 2: 4-digit year */ /* translators: Calendar caption: 1: month name, 2: 4-digit year */
@ -1179,10 +1179,9 @@ function get_calendar($initial = true, $echo = true) {
// Get days with posts // Get days with posts
$dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date) $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
FROM $wpdb->posts WHERE MONTH(post_date) = '$thismonth' FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
AND YEAR(post_date) = '$thisyear'
AND post_type = 'post' AND post_status = 'publish' AND post_type = 'post' AND post_status = 'publish'
AND post_date < '" . current_time('mysql') . '\'', ARRAY_N); AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'", ARRAY_N);
if ( $dayswithposts ) { if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) { foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0]; $daywithpost[] = $daywith[0];
@ -1199,9 +1198,8 @@ function get_calendar($initial = true, $echo = true) {
$ak_titles_for_day = array(); $ak_titles_for_day = array();
$ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom " $ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom "
."FROM $wpdb->posts " ."FROM $wpdb->posts "
."WHERE YEAR(post_date) = '$thisyear' " ."WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' "
."AND MONTH(post_date) = '$thismonth' " ."AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' "
."AND post_date < '".current_time('mysql')."' "
."AND post_type = 'post' AND post_status = 'publish'" ."AND post_type = 'post' AND post_status = 'publish'"
); );
if ( $ak_post_titles ) { if ( $ak_post_titles ) {