-# construct WHERE clause
-# $QueryGroupList is "list of newsgroup" (or 1),
-# $QueryThreshold is threshold definition (or 1),
-# &SQLHierarchies() takes care of the exclusion of hierarchy levels (.ALL)
-# according to setting of -s
-my $WhereClause = sprintf('month BETWEEN ? AND ? AND %s AND %s %s',$QueryGroupList,$QueryThreshold,&SQLHierarchies($Options{'s'}));
-
-# get length of longest newsgroup delivered by query for formatting purposes
-# FIXME
-my $MaxLength = &GetMaxLenght($DBHandle,$Conf{'DBTableGrps'},'newsgroup',$WhereClause,$StartMonth,$EndMonth,(@GroupList,@Params));
-
-my ($OrderClause,$DBQuery);
-# -b (best of / top list) defined?
-if (!defined($Options{'b'}) and !defined($Options{'l'})) {
- # default: neither -b nor -l
- # set ordering (ORDER BY) to "newsgroups" or "postings", "ASC" or "DESC"
- # according to -q and -d
- $OrderClause = 'newsgroup';
- $OrderClause = 'postings' if $Options{'q'};
- $OrderClause .= ' DESC' if $Options{'d'};
- # prepare query: get number of postings per group from groups table for given months and newsgroups
- $DBQuery = $DBHandle->prepare(sprintf("SELECT month,newsgroup,postings FROM %s.%s WHERE %s ORDER BY month,%s",$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$WhereClause,$OrderClause));
-} elsif ($Options{'b'}) {
- # -b is set (then -l can't be!)
- # set sorting order (-i): top or flop list?
- if ($Options{'i'}) {
- $OrderClause = 'postings';
- } else {
- $OrderClause = 'postings DESC';
- };
- # set -b to 10 if < 1 (Top 10)
- $Options{'b'} = 10 if $Options{'b'} !~ /^\d*$/ or $Options{'b'} < 1;
- # push LIMIT to Params
- push @Params,$Options{'b'};
- # prepare query: get sum of postings per group from groups table for given months and newsgroups with LIMIT
- $DBQuery = $DBHandle->prepare(sprintf("SELECT newsgroup,SUM(postings) AS postings FROM %s.%s WHERE %s GROUP BY newsgroup ORDER BY %s,newsgroup LIMIT ?",$Conf{'DBDatabase'},$Conf{'DBTableGrps'},$WhereClause,$OrderClause));
-} else {
- # -l must be set now, as all other cases have been taken care of
- # which kind of level (-i): more than -l x or less than -l x?
- my ($Level);
- if ($Options{'i'}) {
- $Level = '<';
- } else {
- $Level = '>';
- };
- # push level and $StartMonth,$EndMonth - again - to Params
- # FIXME -- together with the query (see below)
- push @Params,$Options{'l'};
- push @Params,$StartMonth,$EndMonth;
- # prepare query: get number of postings per group from groups table for given months and
- # FIXME -- this query is ... in dire need of impromevent
- $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));
-};