将数据库值加载到哈希

时间:2014-01-11 13:17:05

标签: perl

我希望在困扰我的问题上寻求智慧。我有一个返回这样结果的数据库查询:

Ingredients  ID
  fish        1
  salt        1
  pepper      1
  tomato      2  
  veggies     2
  milk        2
   .
   .
   .

我如何使用ID作为键并将值作为值存储到哈希值中? 像这样:

  • 关键(1)值(鱼,盐,胡椒)

  • 关键(2)值(番茄,蔬菜,牛奶)等

在块内

my %results;

   while( %result = $dbh->fetchrow_as_hashtable() ){
        %results{'ID'} = %result{'ID'};
        %results{'Ingredients'} = %result{'Ingredients'}

        }

为什么我感到困惑的问题是1 ID(餐)可能有很多成分。将提取的数据放入哈希图会让我困惑。

2 个答案:

答案 0 :(得分:1)

如果您拨打fetchrow_hashref,每条记录都将作为hashref返回。您可以使用它来形成arrayrefs的散列。

my $sth = $dbh->prepare($query);
$sth->execute;

my %result;
while ( my $rec = $sth->fetchrow_hashref ) {
    # @{...} dereferences the hash value as an array
    # and a value is then pushed into that array
    push @{ $result{ $rec->{ID} } }, $rec->{Ingredients};
}

use Data::Dumper;
print Dumper \%result;

%result现在应该包含:

%result = (
    1 => [qw( fish salt pepper )],
    2 => [qw(tomato veggies milk )],
);

答案 1 :(得分:0)

我猜你应该使用数组的哈希,比如:

%results = (
'1' =>  [ 'fish','salt','pepper'],
'2' => [ 'tomato' ,'veggies','milk'],
);

或者您应该将成分推送到数组中,例如:

push( @{$results{1}}, 'salad'))