in reply to PERL CGI Newbie Question

fruiture and Foxcub are absolutely correct that you wish to do the sort by specifying an 'ORDER BY' clause in the SQL. Pushing the sort into the SQL is far more efficient than trying to do this in Perl. However, in the interest of showing you how to do this in Perl, I have to start by pointing out that you do not have a sortable data structure. What you want is some type of array of arrays or hashes that you can sort. Also, it looks like your nested while loops may have a logic error. Here's one way to approach this:

$dbh->dbcmd($SQL); $dbh->dbsqlexec; my @fields = qw( Id Status StatusDate Severity Priority ProjectId SubS +ystem Process Name EnteredBy DateEntered Contact Closed DateClosed ClosedReason Summary ); my (@results,@data); while ($dbh->dbhresults != NO_MORE_RESULTS and @data = $dbh->dbnextrow +) { my %results; @results{ @fields } = @data; push @results => \%results; } @results = sort { $a->{Name} cmp $b->{Name} } @results;

You now have an array of hash references sorted by 'Name'. See perldoc perlreftut for more information on using references.

Cheers,
Ovid

New address of my CGI Course.
Silence is Evil (feel free to copy and distribute widely - note copyright text)

Replies are listed 'Best First'.
Re: Re: PERL CGI Newbie Question
by Tanalis (Curate) on Dec 13, 2002 at 22:01 UTC
    Just as a side-note, to make this a little easier (yes, I'm lazy), you can have Sybase return a hash keyed on column name for you - using my %hash = $dbh -> dbnextrow(1);

    This means that with Ovid's code above as a basis you can do something like

    my @results; while (my %data = $dbh -> dbnextrow(1)) { push @results => \%data; }

    I should point out that I haven't tested that (at least specifically here), though. Of course, if your're not using the DB column names as your hash keys, it'll all go pear-shaped ..

    Just out of interest, as I said.
    -- Foxcub

      Thank you . This is exactly what I wanted to learn.