我有一个返回多行的查询:
select id,status from store where last_entry = <given_date>;
返回的行如下所示:
id status
-----------------
1131A correct
1132B incorrect
1134G empty
我想存储结果如下:
$rows = [
{
ID1 => '1131A',
status1 => 'correct'
},
{
ID2 => '1132B',
status2 => 'incorrect'
},
{
ID3 => '1134G',
status3 => 'empty'
}
];
我该怎么做?
答案 0 :(得分:0)
您正在寻找的是Perl中哈希的哈希值。你做的是
现在要存储每个此类查询创建的哈希,您需要创建另一个哈希。这里的关键可能是&#39; given_date&#39;在你的情况下,你可以写
$parent_hash{given_date}=\%child_hash
这将导致父哈希具有每个查询结果的引用。
有关更多信息,请参阅以下资源:
http://perldoc.perl.org/perlref.html
http://www.thegeekstuff.com/2010/06/perl-array-reference-examples/
答案 1 :(得分:0)
以下是执行所需操作的脚本的一部分:
my $rows;
while(my $hash_ref = $sth->fetchrow_hashref) {
push @$rows, $hash_ref;
}
答案 2 :(得分:0)
您可以将Slice
选项传递给DBI
的{{3}}来执行此操作:
my $results = $dbh->selectall_arrayref(
'select id,status from store where last_entry = ?',
{ Slice => {} },
$last_entry
);
这将返回一个数组引用,每行存储在一个哈希中。请注意,由于散列键必须是唯一的,因此如果查询中有重复的列名,则会遇到问题。
答案 3 :(得分:0)
你想要这样的东西:
# select the data as an array of hashes - retured as an arrayref
my $rows = $dbh->selectall_arrayref($the_query, {Slice => {}}, @any_search_params);
# now make the id keys unique
my $i = 1;
foreach my $row ( @$rows) {
# remove each column and assign the value to a uniquely named column
# by adding a numeric suffix
$row->{"ID" . $i} = delete $row->{ID};
$row->{"status" . $i} = delete $row->{status};
$i += 1;
}
添加您自己的错误检查。
所以你说&#34;保存为哈希,&#34;但是你的例子是一个哈希数组。因此哈希散列的方法略有不同。
答案 4 :(得分:0)
这是一个立即引发红旗的问题。想要一个异构数据结构的集合(数组/数组引用)是一个奇怪的请求 - 这是集合的全部要点。如果您告诉我们您打算如何处理数据而不是您想要的数据,我们可能会建议更好的解决方案。