diff --git a/lib/database/search.php b/lib/database/search.php index 8861dbf0b1..feb3d70c2c 100644 --- a/lib/database/search.php +++ b/lib/database/search.php @@ -7,44 +7,37 @@ function performSearch(int $searchType, string $searchQuery, int $offset, int $c { sanitize_sql_inputs($searchQuery, $offset, $count); - $found_rows = 'SQL_CALC_FOUND_ROWS'; $parts = []; if ($searchType == SearchType::Game || $searchType == SearchType::All) { $parts[] = "( - SELECT $found_rows 'Game' AS Type, gd.ID, CONCAT( '/game/', gd.ID ) AS Target, CONCAT(gd.Title, ' (', c.Name, ')') as Title FROM GameData AS gd + SELECT 'Game' AS Type, gd.ID, CONCAT( '/game/', gd.ID ) AS Target, CONCAT(gd.Title, ' (', c.Name, ')') as Title FROM GameData AS gd LEFT JOIN Achievements AS ach ON ach.GameID = gd.ID AND ach.Flags = 3 LEFT JOIN Console AS c ON gd.ConsoleID = c.ID WHERE gd.Title LIKE '%$searchQuery%' GROUP BY gd.ID, gd.Title ORDER BY gd.Title)"; - - $found_rows = ''; } if ($searchType == SearchType::Achievement || $searchType == SearchType::All) { $parts[] = "( - SELECT $found_rows 'Achievement' AS Type, ach.ID, CONCAT( '/achievement/', ach.ID ) AS Target, ach.Title FROM Achievements AS ach + SELECT 'Achievement' AS Type, ach.ID, CONCAT( '/achievement/', ach.ID ) AS Target, ach.Title FROM Achievements AS ach WHERE ach.Flags = 3 AND ach.Title LIKE '%$searchQuery%' ORDER BY ach.Title)"; - - $found_rows = ''; } if ($searchType == SearchType::User || $searchType == SearchType::All) { $parts[] = "( - SELECT $found_rows 'User' AS Type, + SELECT 'User' AS Type, ua.User AS ID, CONCAT( '/user/', ua.User ) AS Target, ua.User AS Title FROM UserAccounts AS ua WHERE ua.User LIKE '%$searchQuery%' AND ua.Permissions >= 0 AND ua.Deleted IS NULL ORDER BY ua.User)"; - - $found_rows = ''; } if ($searchType == SearchType::Forum || $searchType == SearchType::All) { $parts[] = "( - SELECT $found_rows 'Forum Comment' AS Type, + SELECT 'Forum Comment' AS Type, ua.User AS ID, CONCAT( '/viewtopic.php?t=', ftc.ForumTopicID, '&c=', ftc.ID, '#', ftc.ID ) AS Target, CASE WHEN CHAR_LENGTH(ftc.Payload) <= 64 THEN ftc.Payload ELSE @@ -56,13 +49,11 @@ function performSearch(int $searchType, string $searchQuery, int $offset, int $c AND ft.RequiredPermissions <= '$permissions' GROUP BY ID, ftc.ID ORDER BY DateModified DESC)"; - - $found_rows = ''; } if ($searchType == SearchType::Comment || $searchType == SearchType::All) { $parts[] = "( - SELECT $found_rows 'Comment' AS Type, cua.User AS ID, + SELECT 'Comment' AS Type, cua.User AS ID, CASE WHEN c.articletype=1 THEN CONCAT( '/game/', c.ArticleID ) @@ -85,11 +76,10 @@ function performSearch(int $searchType, string $searchQuery, int $offset, int $c AND ua.UserWallActive AND ua.Deleted IS NULL AND c.articletype IN (1,2,3,5,7) ORDER BY c.Submitted DESC)"; - - $found_rows = ''; } - $query = implode(' UNION ALL ', $parts) . " LIMIT $offset, $count"; + $query = "SELECT SQL_CALC_FOUND_ROWS * FROM (" . + implode(' UNION ALL ', $parts) . ") AS results LIMIT $offset, $count"; $dbResult = s_mysql_sanitized_query($query); if (!$dbResult) { diff --git a/public/request/search.php b/public/request/search.php index bcc76a95d0..b54349a2cb 100644 --- a/public/request/search.php +++ b/public/request/search.php @@ -34,6 +34,7 @@ if ($numFound >= $maxResults) { break; } + $maxResults -= $numFound; } $dataOut = [];