Thank you, David, very much for your solution. With one minor change ("use DBD::mysql"), it worked perfectly. I am in awe of you ability to do this.
I was hoping to use this as a subroutine, to build an array in memory, then to use it repeatedly without rereading the database. Can your solution be used for this? I think your "while' loop could be used to build up this structure [I think this is a hash of arrays. Am I correct?], but I'm not sure how to populate it. Thanks, again, for the time you took to help me. -Kevin >>> "David Kirol" <[EMAIL PROTECTED]> 04/16/02 11:09AM >>> Kevin, The script below works on my (quickly constructed) approximation of your table/data. It somewhat skirts the issue you mentioned (getting started with hashes) but it may be more to the point. use DBI; use DBD::Mysql; use strict; my $dbname = ""; # enter your db name my $host = "localhost"; my $dbuser = ''; # user may be required my $dbpw = ''; # pw may be required my $mscs = "dbi:mysql:dbname=$dbname;host=$host;"; my $dbh = DBI->connect($mscs, $dbuser, $dbpw) or die "Connect fails to $dbname\nError = ", DBI::errstr; my $sql = "select * from method"; my $sth = $dbh->prepare($sql) or die "Prepare fails for stmt:\n\t\t$sql\nError = ", DBI::errstr; my $rv; unless ($sth->execute) { print"\n\tExecute fails for stmt:\n\t\t$sql\nError = ", DBI::errstr; $sth->finish; $dbh->disconnect; die "\n\t\tClean up finished\n"; } print "\t\t$rv\n\n" if $rv; my %row_ary; my $row_ary; my $key; while ($row_ary = $sth->fetchrow_hashref) { # fetch as a Hash Reference foreach $key (sort keys %$row_ary) { # '%$' is used to dereference the scalar $row_ary to the hash print"Key:$key Value $$row_ary{$key}\n"; # $$row_ary is part of the deref voodoo } print"\n"; } $sth->finish; $dbh->disconnect; HTH -----Original Message----- From: KEVIN ZEMBOWER [mailto:[EMAIL PROTECTED]] Sent: Tuesday, April 16, 2002 10:15 AM To: [EMAIL PROTECTED] Subject: Need help getting started using hashes I'm having a hard time understanding and getting started with hashes. I don't think I get the concept, and so can't go from the concept to the actual code. I have a MySQL database table called "methods" with three fields, methodid, method, and sname. I'd like to read them into a hash, so that I could refer to them there (in memory) rather than repeatedly reading the database. Here's the output of the table: mysql> select * from method; +----------+------------------------------------+---------+ | methodid | method | sname | +----------+------------------------------------+---------+ | 1 | Combined OCs | COC | | 2 | Progestin-Only OCs | POC | | 3 | DMPA/NET EN | DMPA | | 4 | Norplant Implants | NI | | 5 | Female Sterilization | FS | | 6 | Vasectomy | Vas | | 7 | Condoms | Condoms | | 8 | TCu-380A IUD | TCu | | 9 | Spermicides | Sperm | | 10 | Diaphragm Cervical Cap | DCC | | 11 | Fertility Awareness-based Methods | FABM | | 12 | Lacational Amenorrhea Method (LAM) | LAM | +----------+------------------------------------+---------+ 12 rows in set (0.01 sec) (I work in the field of reproductive health. Can you tell?) I think I can read in the table with this code, but don't know how to build it into a hash: use DBI; our $dbh = DBI->connect("dbi:mysql:cire:localhost", "cire", "password", {RaiseError => 1, AutoCommit => 0}) or die; my $method_arrayref = $dbh->selectall_arrayref("SELECT methodid, method, sname FROM method ORDER BY methodid"); [Don't know what to do here to build it into a hash, that I can reference by explicitly stating the methodid, then using the method or sname.] Instead of the selectall_arrayref, I can use a while loop and read the table one row at a time, using fetchrow_arrayref, but I still don't know how to use that to build the hash. Would this method be easier? Finally, when I've got the hash built, how can I get a particular method, by specifying it's methodid, or instance? Thanks for your help and suggestions. Please let me know if I should take this question to the DBI-users list. -Kevin Zembower ----- E. Kevin Zembower Unix Administrator Johns Hopkins University/Center for Communications Programs 111 Market Place, Suite 310 Baltimore, MD 21202 410-659-6139 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]