groupstats.pl: Redo level (-l) query, gain speedup.
Do the work in the application, using two separate SQL queries, instead of trying to optimize the single query in vain ... Thanks to Juliane. :) Fixes #16. Signed-off-by: Thomas Hochstein <thh@inter.net>
This commit is contained in:
parent
404c1acdc8
commit
b802bc3d29
|
@ -155,13 +155,17 @@ if (!defined($Options{'b'}) and !defined($Options{'l'})) {
|
||||||
} else {
|
} else {
|
||||||
$Level = '>';
|
$Level = '>';
|
||||||
};
|
};
|
||||||
# push level and $StartMonth,$EndMonth - again - to Params
|
# prepare and execute query: get list of newsgroups meeting level condition
|
||||||
# FIXME -- together with the query (see below)
|
$DBQuery = $DBHandle->prepare(sprintf("SELECT newsgroup FROM %s.%s WHERE %s GROUP BY newsgroup HAVING MAX(postings) %s ?",$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$WhereClause,$Level));
|
||||||
push @Params,$Options{'l'};
|
$DBQuery->execute($StartMonth,$EndMonth,@GroupList,$Options{'l'})
|
||||||
push @Params,$StartMonth,$EndMonth;
|
or die sprintf("$MySelf: E: Can't get groups data for %s to %s from %s.%s: %s\n",$StartMonth,$EndMonth,$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$DBI::errstr);
|
||||||
# prepare query: get number of postings per group from groups table for given months and
|
# add newsgroups to a comma-seperated list ready for IN(...) query
|
||||||
# FIXME -- this query is ... in dire need of impromevent
|
my $GroupList;
|
||||||
$DBQuery = $DBHandle->prepare(sprintf("SELECT month,newsgroup,postings FROM %s.%s WHERE newsgroup IN (SELECT newsgroup FROM %s.%s WHERE %s GROUP BY newsgroup HAVING MAX(postings) %s ?) AND %s ORDER BY newsgroup,month",$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$WhereClause,$Level,$WhereClause));
|
while (my ($Newsgroup) = $DBQuery->fetchrow_array) {
|
||||||
|
$GroupList .= ',' if (defined($GroupList) and $GroupList ne '');
|
||||||
|
$GroupList .= "'$Newsgroup'";
|
||||||
|
};
|
||||||
|
$DBQuery = $DBHandle->prepare(sprintf("SELECT month,newsgroup,postings FROM %s.%s WHERE newsgroup IN (%s) AND %s ORDER BY newsgroup,month",$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$GroupList,$WhereClause));
|
||||||
};
|
};
|
||||||
|
|
||||||
# execute query
|
# execute query
|
||||||
|
|
Loading…
Reference in a new issue