From f7715bdd2ebff189efc64c2b639a69d3ab3138bc Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 16 Feb 2005 15:15:59 +0000 Subject: [PATCH] Make system for making groups after the very first round. --- html/do-start-round.pl | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/html/do-start-round.pl b/html/do-start-round.pl index 2637076..ea6894e 100755 --- a/html/do-start-round.pl +++ b/html/do-start-round.pl @@ -30,7 +30,35 @@ if ($round == 1) { $people = ccbs::db_fetch_all($dbh, 'SELECT * FROM players WHERE player IN ( SELECT player FROM tournamentparticipation WHERE tournament=? ) ORDER BY lower(nick)', $tournament); } else { - die "Fix qualifying later"; + # First of all, check that there are no null values! + my $ref = $dbh->selectrow_hashref('SELECT COUNT(*) AS num_incomplete FROM scores WHERE tournament=? AND round=? AND (song IS NULL OR playmode IS NULL OR difficulty IS NULL OR chosen IS NULL or score IS NULL)', undef, $tournament, $round-1); + if ($ref->{'num_incomplete'} != 0) { + ccbs::user_error("Det er fortsatt $ref->{'num_incomplete'} sanger igjen i denne runden som ikke har alle data registrert."); + } + + # Find out how many people will go on from the _current_ group (ie. the one + # before the one we just inserted) + my $ref = $dbh->selectrow_hashref('SELECT numqualifying FROM rounds WHERE tournament=? AND round=?', + undef, $tournament, $round - 1); + my $num_qual_prev = $ref->{'numqualifying'}; + + # Get the total list of scores for each player in this round, and pick + # out the best N + $people = []; + my $q = $dbh->prepare('SELECT parallel,player,SUM(score) AS score FROM scores WHERE tournament=? AND round=? GROUP BY parallel,player ORDER BY parallel, SUM(score) DESC'); + $q->execute($tournament, $round - 1); + + my ($parallel,$num_from_this_parallel); + + while (my $ref = $q->fetchrow_hashref()) { + if (!defined($parallel) || $parallel != $ref->{'parallel'}) { + $parallel = $ref->{'parallel'}; + $num_from_this_parallel = 0; + } + if ($num_from_this_parallel++ < $num_qual_prev) { + push @$people, {%$ref}; + } + } } # Zigzag people to get the most fair groups possible -- 2.39.2