in reply to What's an Efficient Way to Retrieve a Rank from a MySQL Table?
Well, if you need constant up-to-date ranking, just don't keep the whole database contents in memory at once. At first, loop through the rows only selecting the columns needed for ranking. Then do your ranking, and then loop through the database a second time, pulling out the rows in the correct order determined by the ranking. Something like the following perhaps?
my $dbh = DBI->connect( ... ); my $sth1 = $dbh->prepare( 'SELECT studentid, ranker1, ranker2 FROM students' ); $sth1->execute(); my %ranked; while ( my $row = $sth1->fetchrow_arrayref() ) { my $calc_rank = $row->{ranker1} + $row->{ranker2}; %ranked{ $row->{studentid} } = $calc_rank; } my @rank_order = sort { $ranked{$a} <=> $ranked{$b} } keys( %ranked ); my $sth2 = $dbh->prepare( 'SELECT * FROM students WHERE studentid=?' ); for my $studentid ( @rank_order ) { $sth2->execute( $studentid ); my $row = $sth2->fetchrow_hashref(); while ( my($k, $v) = each( %$row ) ) { print( "$k: $v\n" ); } print( "\n\n" ); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: What's an Efficient Way to Retrieve a Rank from a MySQL Table?
by Anonymous Monk on May 04, 2004 at 09:31 UTC | |
|
Re: Re: What's an Efficient Way to Retrieve a Rank from a MySQL Table?
by soon_j (Scribe) on May 04, 2004 at 10:26 UTC |