diff options
author | brunoais <brunoaiss@gmail.com> | 2015-03-06 11:07:09 +0000 |
---|---|---|
committer | brunoais <brunoaiss@gmail.com> | 2015-03-06 22:23:45 +0000 |
commit | f4c423cea19858f9fa17e26f9c7447030f0ad8a0 (patch) | |
tree | 6c50dc4718be440e9212c08e052f4c46e6b14132 /phpBB/phpbb/search/fulltext_native.php | |
parent | f3ab7aae9effae85e3239be77343dfb6aff80513 (diff) | |
download | forums-f4c423cea19858f9fa17e26f9c7447030f0ad8a0.tar forums-f4c423cea19858f9fa17e26f9c7447030f0ad8a0.tar.gz forums-f4c423cea19858f9fa17e26f9c7447030f0ad8a0.tar.bz2 forums-f4c423cea19858f9fa17e26f9c7447030f0ad8a0.tar.xz forums-f4c423cea19858f9fa17e26f9c7447030f0ad8a0.zip |
[ticket/13674] Change MySQL native total search results calculation
This changes how the native FULLTEXT search calculates the total
match number for MySQL.
This should improve performance as there is one less query being made
and it is being searched using the technique mentioned in the manual
PHPBB3-13674
Diffstat (limited to 'phpBB/phpbb/search/fulltext_native.php')
-rw-r--r-- | phpBB/phpbb/search/fulltext_native.php | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/phpBB/phpbb/search/fulltext_native.php b/phpBB/phpbb/search/fulltext_native.php index 93ea46ca60..4dd1512fa4 100644 --- a/phpBB/phpbb/search/fulltext_native.php +++ b/phpBB/phpbb/search/fulltext_native.php @@ -823,6 +823,13 @@ class fulltext_native extends \phpbb\search\base ); } + // if using mysql and the total result count is not calculated yet, get it from the db + if(!$total_results && $is_mysql) + { + // Also count rows for the query as if there was not LIMIT. Add SQL_CALC_FOUND_ROWS to SQL + $sql_array['SELECT'] = 'SQL_CALC_FOUND_ROWS ' . $sql_array['SELECT']; + } + $sql_array['WHERE'] = implode(' AND ', $sql_where); $sql_array['GROUP_BY'] = ($group_by) ? (($type == 'posts') ? 'p.post_id' : 'p.topic_id') . ', ' . $sort_by_sql[$sort_key] : ''; $sql_array['ORDER_BY'] = $sql_sort; @@ -838,19 +845,9 @@ class fulltext_native extends \phpbb\search\base } $this->db->sql_freeresult($result); - // if we use mysql and the total result count is not cached yet, retrieve it from the db if (!$total_results && $is_mysql) { - // Count rows for the executed queries. Replace $select within $sql with SQL_CALC_FOUND_ROWS, and run it - $sql_array_copy = $sql_array; - $sql_array_copy['SELECT'] = 'SQL_CALC_FOUND_ROWS p.post_id '; - - $sql_calc = $this->db->sql_build_query('SELECT', $sql_array_copy); - unset($sql_array_copy); - - $this->db->sql_query($sql_calc); - $this->db->sql_freeresult($result); - + // Get the number of results as calculated by MySQL $sql_count = 'SELECT FOUND_ROWS() as total_results'; $result = $this->db->sql_query($sql_count); $total_results = (int) $this->db->sql_fetchfield('total_results'); |