]> git.sesse.net Git - ccbs/blob - html/player.pl
Specify join, so that we don't join tournament+score on country. :-)
[ccbs] / html / player.pl
1 #! /usr/bin/perl
2
3 use ccbs;
4 use strict;
5 use warnings;
6
7 my $cgi = new CGI;
8 my $id = $cgi->param('id');
9
10 my $dbh = ccbs::db_connect();
11
12 my $player = $dbh->selectrow_hashref('SELECT * FROM players NATURAL JOIN countries NATURAL LEFT JOIN clubs WHERE player=?', undef, $id);
13 my $bestsongs = ccbs::db_fetch_all($dbh, 'SELECT song,title,score,tournament,tournamentname FROM ( SELECT DISTINCT ON (song) song,score,tournament FROM scores WHERE player=? AND score IS NOT NULL ORDER BY song,score DESC ) t1 NATURAL JOIN songs NATURAL JOIN tournaments ORDER BY score DESC LIMIT 10', $id);
14
15 # Fetch all scores and count a bit
16 my $columns = 0;
17 my @allsongs = ();
18 my $last_song = undef;
19
20 my $scores = ccbs::db_fetch_all($dbh, 'SELECT song,title,score FROM scores NATURAL JOIN songs WHERE player=? ORDER BY title,score DESC', $id);
21 for my $score (@$scores) {
22         my $song = $score->{'song'};
23
24         if (!defined($last_song) || $song != $last_song) {
25                 push @allsongs, { song => $song, title => $score->{'title'}, scores => [] };
26         }
27
28         push @{$allsongs[$#allsongs]->{'scores'}}, $score->{'score'};
29
30         my $this_columns = scalar @{$allsongs[$#allsongs]->{'scores'}};
31         $columns = $this_columns if ($this_columns > $columns);
32
33         $last_song = $song;
34 }
35
36 ccbs::print_header();
37 ccbs::process_template('player.tmpl', $player->{'nick'}, {
38         player => $player,
39         bestsongs => $bestsongs,
40         allsongs => \@allsongs,
41         columns => $columns
42 });
43 $dbh->disconnect;