--- includes/pager.inc.old 2007-04-12 19:23:12.000000000 +1000 +++ includes/pager.inc 2007-04-12 20:04:23.000000000 +1000 @@ -60,19 +60,28 @@ $args = $args[0]; } - // Construct a count query if none was given. - if (!isset($count_query)) { - $count_query = preg_replace(array('/SELECT.*?FROM /As', '/ORDER BY .*/'), array('SELECT COUNT(*) FROM ', ''), $query); - } - // Convert comma-separated $page to an array, used by other functions. $pager_page_array = explode(',', $page); + // Execute the query + $results = db_query_range($query, $args, $pager_page_array[$element] * $limit, $limit); + $num_results = db_num_rows($results); + if ($num_results == $limit) { + // Construct a count query if none was given. + if (!isset($count_query)) { + $count_query = preg_replace(array('/SELECT.*?FROM /As', '/ORDER BY .*/'), array('SELECT COUNT(*) FROM ', ''), $query); + } + $pager_total_items[$element] = db_result(db_query($count_query, $args)); + } + else { + // We know exactly how many results there are without asking the DB + $pager_total_items[$element] = $pager_page_array[$element] * $limit + $num_results; + } + // We calculate the total of pages as ceil(items / limit). - $pager_total_items[$element] = db_result(db_query($count_query, $args)); $pager_total[$element] = ceil($pager_total_items[$element] / $limit); $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1)); - return db_query_range($query, $args, $pager_page_array[$element] * $limit, $limit); + return $results; } /**