Bug 22082: ambiguous column in patron stats
authorFridolin Somers <fridolin.somers@biblibre.com>
Tue, 8 Jan 2019 13:32:19 +0000 (14:32 +0100)
committerNick Clemens <nick@bywatersolutions.com>
Fri, 18 Jan 2019 20:31:58 +0000 (20:31 +0000)
In Reports > Patrons statistics, the combination of activity and extended attributes generates an invalid SQL query with error :
ERROR 1052 (23000): Column 'borrowernumber' in IN/ALL/ANY subquery is ambiguous

This is because FROM contains tables borrowers and borrower_attributes both containing borrowernumber column.

Test plan :
1) Be sure to have a patron extended attribute
2) Be sure you have some recent circulation activity
3) Go to Reports > Patrons statistics
4) Select 'active' in 'Patron activity' and 1 years of activity
5) Check 'Row' in 'Patron category'
6) Check 'Columns' in a extended attribute
7) Submit
8) Without patch you have no results, with patch you have exepected results

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

reports/borrowers_stats.pl

index a58ccc7..4b700c1 100755 (executable)
@@ -396,8 +396,8 @@ sub calculate {
             $strcalc .= " AND attribute_$type.attribute LIKE '" . $filter . "' ";
         }
     }
-       $strcalc .= " AND borrowernumber in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "')" if ($activity eq 'active');
-       $strcalc .= " AND borrowernumber not in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "' AND borrowernumber IS NOT NULL)" if ($activity eq 'nonactive');
+    $strcalc .= " AND borrowers.borrowernumber in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "')" if ($activity eq 'active');
+    $strcalc .= " AND borrowers.borrowernumber not in (select distinct(borrowernumber) from old_issues where issuedate > '" . $newperioddate . "' AND borrowernumber IS NOT NULL)" if ($activity eq 'nonactive');
        $strcalc .= " AND $status='1' " if ($status);
 
     $strcalc .= " GROUP BY ";