Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

$dbh->selectall_arrayref to simple @array

by guacamayo (Acolyte)
on Sep 14, 2011 at 14:55 UTC ( #925926=perlquestion: print w/ replies, xml ) Need Help??
guacamayo has asked for the wisdom of the Perl Monks concerning the following question:

Hi! I need from ...
$dbh->selectall_arrayref( "SELECT ename FROM emp ORDER BY ename", { Slice => {} } );
only a @array as result and not a array_ref. How can I do that ? on Perl DBI Docs ...
my $emps = $dbh->selectall_arrayref( "SELECT ename FROM emp ORDER BY ename", { Slice => {} } ); foreach my $emp ( @$emps ) { print "Employee: $emp->{ename}\n"; }
but i need a alternative with 2 lines :-) Thanks a lot
@array [ value, value2, value3] or $string = "value, value2, value3";

Comment on $dbh->selectall_arrayref to simple @array
Select or Download Code
Re: $dbh->selectall_arrayref to simple @array
by Corion (Pope) on Sep 14, 2011 at 15:01 UTC
Re: $dbh->selectall_arrayref to simple @array
by metaperl (Curate) on Sep 14, 2011 at 18:02 UTC
Re: $dbh->selectall_arrayref to simple @array
by chrestomanci (Priest) on Sep 15, 2011 at 20:17 UTC

    I was puzzling over that today. The issue is that selectall_arra­yref gives you back a reference to an array of arrays, where each row from the query result is put into an array, and references to each of those arrays are put into a higher level array. A reference to that top level array is returned. All this is usefull if you are querying for several collums in each row, but is a useless level of indirection if you are only querying for one.

    The solution I used was to make use of the map function to flatten the data structure. I hope it does not look to much like code golf!

    my @query_results = map { $_->[0] } @{ $sth->fetchall_arrayref() };
Re: $dbh->selectall_arrayref to simple @array
by Juerd (Abbot) on Sep 18, 2011 at 16:04 UTC

    Why do you want an array without a reference? Arrays that are accessed by references can do exactly the same things, only the syntax is a bit different.

    By the way, consider DBIx::Simple, which allows you to do:

    my @emps = $db->query("SELECT ename FROM emp ORDER BY ename")->flat; foreach my $emp (@emps) { ... }
    "flat" means: take all results and return them as one flat list.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://925926]
Approved by Corion
Front-paged by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (7)
As of 2015-07-07 02:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (86 votes), past polls