From 4c1d591810869fa6ef5172e73dfdb95b53cd6e12 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Mon, 26 May 2008 22:10:08 +0000 Subject: [PATCH] Fix duplicate row removal --- includes/SpecialWhatlinkshere.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/includes/SpecialWhatlinkshere.php b/includes/SpecialWhatlinkshere.php index 346a83b6e4..f871d20eb6 100644 --- a/includes/SpecialWhatlinkshere.php +++ b/includes/SpecialWhatlinkshere.php @@ -349,8 +349,10 @@ class WhatLinksHerePager extends AlphabeticPager { } /** - * Do a query with specified parameters, rather than using the object - * context + * Do a query with specified parameters + * Note: in theory this could miss results if there were + * so many rows with the same page_id that the UNION table was + * exhausted and more rows should have been scanned in it's creation. * * @param string $offset Index offset, inclusive * @param integer $limit Exact query limit @@ -388,8 +390,9 @@ class WhatLinksHerePager extends AlphabeticPager { $SQLqueries[] = '('.$this->mDb->selectSQLText( $tables, $fields, $conds, $fname, $options, $join_conds ).')'; } // Contruct the final query. UNION the mini-queries and merge the results. + $SQL = 'SELECT * FROM (' . implode(' UNION ',$SQLqueries) . ') AS result_links'; // Remove duplicates within the result set. - $SQL = implode(' UNION DISTINCT ',$SQLqueries); + $SQL .= ' GROUP BY page_id'; // Use proper order of result set $SQL .= $descending ? " ORDER BY {$this->mIndexField} DESC" : " ORDER BY {$this->mIndexField}"; // Cut off at the specified limit -- 2.20.1