Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re^3: Another "Can't use string as an ARRAY ref"

by poj (Abbot)
on Dec 05, 2016 at 09:58 UTC ( #1177219=note: print w/replies, xml ) Need Help??

in reply to Re^2: Another "Can't use string as an ARRAY ref"
in thread Another "Can't use string as an ARRAY ref"

You might want to consider a simpler more SQL solution

#!perl use strict; use DBI; use Data::Dumper; my $dbh = create_db(); my $sql = 'SELECT P.common_name,S.plant_size,S.unit,G.abbr FROM plants as P LEFT JOIN sizes as S ON S.plantid = LEFT JOIN growers as G ON S.plantid = G.plantid AND S.plant_size = G.plant_size'; my $sth = $dbh->prepare($sql); $sth->execute(); my %hash=(); while (my @f = $sth->fetchrow_array){ $hash{$f[0]}{$f[1].$f[2]}{$f[3]} = 1 } print Dumper(\%hash);
sub create_db { unlink 'mydb.sqlite' if -e 'mydb.sqlite'; my $dbh = DBI->connect("dbi:SQLite:dbname=mydb.sqlite","",""); $dbh->do('CREATE TABLE plants (genus,common_name,type,chicagoland_gr +ows,id )'); $dbh->do('CREATE TABLE sizes (show_plant,plant_size,plantid,unit,use +rid)'); $dbh->do('CREATE TABLE growers (plantid,plant_size,abbr)'); my $sql = 'INSERT INTO plants VALUES (?,?,?,?,?)'; my $sth = $dbh->prepare($sql); $sth->execute("Roses","Roses",1,0,1000); $sth->execute("Violets","Violets",1,0,1001); $sql = 'INSERT INTO sizes VALUES (?,?,?,?,?)'; $sth = $dbh->prepare($sql); my @sizes = ( [1,2,1000,'"',4],[1,4,1000,'"',4], [1,3,1001,'"',4] ); $sth->execute(@$_) for @sizes; $sql = 'INSERT INTO growers VALUES (?,?,?)'; $sth = $dbh->prepare($sql); my @growers = ( [1000,2,'MA'],[1000,2,'CD'],[1000,2,'TH'], [1000,4,'CD'],[1000,4,'TH'],[1001,3,'MA'], [1001,3,'TH'] ); $sth->execute(@$_) for @growers; return $dbh; }

Replies are listed 'Best First'.
Re^4: Another "Can't use string as an ARRAY ref"
by bradcathey (Prior) on Dec 05, 2016 at 18:34 UTC

    I appreciate the SQL approach. It's so much easier the building stuff in raw Perl. My SQL chops aren't what yours are, but I'm going to dissect this to see how it works. Thanks.

    "The important work of moving the world forward does not wait to be done by perfect men." George Eliot

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1177219]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2023-11-28 08:50 GMT
Find Nodes?
    Voting Booth?

    No recent polls found