in reply to Saving sql results to an array all rows?

As dHarry says, you're probably best off having the database sort your results.

If you want to get every row, use a DBI method that does that. For example:

$sth->execute( $line, $line ) or die ...; my @all_rows = @{ $sth->fetchall_arrayref() };

At that point, every element in @all_rows is an array reference. The first row is $all_rows[0]. The first column of the first row is $all_rows[0][0].

If you want, you can get an array of hash refs instead. I find these more useful because you can refer to the fields by name.

my @all_rows = @{ $sth->fetchall_arrayref( {} ) };

In that case, $all_rows[0] is still the first row, but it's a hash ref instead. Then you can do $all_rows[0]{srcaddr} for that field in that row.

If you want to output the whole structure, Data::Dumper is good for that, or see How can I visualize my complex data structure?.

Replies are listed 'Best First'.
Re^2: Saving sql results to an array all rows?
by learningperl01 (Beadle) on Aug 18, 2008 at 18:25 UTC
    Krambambuli I followed your example and I get all rows/results correctly. Now the only problem/thing that I do not know how to deal with is the @{$row_ref} array? If I wanted to run the sorted code which runs against an array passing it the @{$row_ref} array does not work. I get an array code ARRAY(0x9019330) on the screen here is the code that I am using currently. Thanks for the help!!
    foreach my $line (@lines) { $sth->execute($line, $line) or die "Can't execute SQL statemen +t: $DBI::errstr\n"; my @all_rows; while ( my $ref = $sth->fetchrow_arrayref()) { push(@all_rows, $ref); } foreach my $row_ref (@all_rows) { print "@{$row_ref}\n"; } }
    Here is the sorting code that I use in a separate script which is what I am having trouble incorporating to the @{$row_ref} array. I am guessing that I can't use @{$row_ref} name when running my sort? Any ideas or help would be greatly appreciated.
    my @sorted = map {$_->[0]} sort {$a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] || $a->[3] <=> $b->[3] || $a->[4] <=> $b->[4]} map { [$_, split(/\./, (split /\s+/, $_)[1])]} @lines; print "$_\n" for @{$row_ref};
    sample of the sql output below. 2008-07-26 10.168.1.1 11122 3.3.3.3 80 hxxp://3.3.3.3 200 OK