如何将两个(或更多)行放入单个数组中,从而提供对每个行列的单独访问

时间:2012-10-26 13:32:11

标签: mysql perl multidimensional-array rows

我一直在努力奋斗16个小时而且我的智慧结束了。我已阅读所有联机帮助页,尝试自己编写,尝试了几个示例并修改了许多无效。

我想要做的就是从我的数据库中获取一些行,并且能够单独访问每个行变量(列数据)。

 #!/usr/bin/perl -w
    use strict;
    use CGI;
    use CGI ':standard';
    use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
    print CGI::header(-expires => '-1d');
    use DBI;
    $|=1;

use vars qw($getstate $hookup $query $results $city $state $pages $category $lastupdate $progress $actual $city1 $state1 $pages1 $category1 $lastupdate1 $progress1 $actual1);


    $getstate = 'Arizona'; ## actually comes in from a query

    ##$hookup is returned from a sub with database credentials
   $query = $hookup->prepare(qq{SELECT `city`,`state`,`pages`,`category`,`lastupdate`,`progress`,`actual` FROM `statesettings` WHERE `pages` > `progress` AND `state` LIKE ? ORDER BY `lastupdate` ASC LIMIT 2}); 
    $query->bind_param(1, "%$getstate%");
    $query->execute() or die "Query did not execute";

    ## I HAVE TRIED all kinds of ways to fetch data! fetchall_arrayref() fetchrow_array() and dozens upon dozens of attempts.

    while ($results = $query->fetchrow_hashref) {
    $city = $results->{city};
    $pages = $results->{pages};
    $category = $results->{category};
    $lastupdate = $results->{lastupdate};
    $progress = $results->{progress};
    $actual = $results->{actual};
    #####################
    }## end WHILE
    $query->finish;
    $hookup->disconnect;

其中,例如,在上面,我只能弄清楚如何访问一行。

但是我想要这样的东西:(显然是为我要求的行数设置的)

$city = $arr[0]['city']; #city from row 0
$city1 = $arr[1]['city']; #city from row 1

OR WHATEVER允许我单独获取每行的列数据,以便进一步使用!

我确实成功地使用了一大堆我编写的代码将所有数据推送到一个数组中,并使用':'划分我之后拆分的行然后循环每一行。问题是如何用最可能的代码获得我的结果的一个很好的例子。我知道我想要做的是“内置”但是,我只是不具备脑力。 我觉得自己完全死了脑筋,因为经过这么多个小时我无法理解这一点。 太近了看可能吗?

我想要一些解释以及任何示例代码,因此,我可以学习/理解机制。非常感谢你的指导...

2 个答案:

答案 0 :(得分:3)

你可以写:

my @arr;
while ($results = $query->fetchrow_hashref)
{
  push @arr, $results;
}
$query->finish;
$hookup->disconnect;

然后执行您想要的任何其他任务:

my $city = $arr[0]->{'city'}; # city from first row
my $city1 = $arr[1]->{'city'}; # city from second row

或:

my @all_cities = map { $_->{'city'} } @arr;

my $city = $all_cities[0]; # city from first row
my $city1 = $all_cities[1]; # city from second row

答案 1 :(得分:0)

你快到了。

my $res_arrayref;
while ($results = $query->fetchrow_hashref) {
... your code...
push @{$res_arrayref}, $result;
}    

...later...
$res_arrayref->[0]->{city};