Perl selectall_array - 从数组 ref 的数组中检索所有数据
Perl selectall_array - retrieve all data from array of array ref
我正在使用 DBI
selectall_array
从 mysql 中获取所有数据。我的查询 returns 每行 1 列。但是 selectall_array
函数 returns 如下所列的每一行的数组引用数组
$VAR1 = [
'1.ptmp'
];
$VAR2 = [
'e1.ptmp'
];
$VAR3 = [
's2.ptmp'
];
$VAR4 = [
'sw1.ptmp'
];
$VAR5 = [
'w1.ptmp'
];
我想要的是一种将所有域提取到单个数组(无引用)中的方法,或者是否有 DBI 函数 returns 没有任何引用的完整数据数组?我不想遍历所有数据或在 while 循环中执行 fetchrow_array
。如果可能,是否正在寻找一条语句来完成所有操作?
请看下面我的代码:
my @mysqldata = $dbh->selectall_array('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params);
my @minus = array_minus( @all, @mysqldata );
您可以像这样在一行中将 arrayrefs 解引用到一个大数组中:
my @all = map {@$_} $dbh->selectall_array($sql);
map
块将 @$_
应用于 selectall_array
返回的每一行,这取消了对数组引用的引用。
由于您只提取一列,因此您可以尝试 selectcol_arrayref()
方法 - 内联取消引用数组。
my @mysqldata = @{ $dbh->selectcol_arrayref('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params) };
更新
正如 ysth 在评论中所建议的那样,您可以在较新版本的 Perl(v5.20.0 及更高版本)中使用后缀运算符来取消引用 selectcol_arrayref()
返回的值 - 如下所示。
$dbh->selectcol_arrayref('SELECT domain FROM dfs', undef, @params)->@*;
我正在使用 DBI
selectall_array
从 mysql 中获取所有数据。我的查询 returns 每行 1 列。但是 selectall_array
函数 returns 如下所列的每一行的数组引用数组
$VAR1 = [
'1.ptmp'
];
$VAR2 = [
'e1.ptmp'
];
$VAR3 = [
's2.ptmp'
];
$VAR4 = [
'sw1.ptmp'
];
$VAR5 = [
'w1.ptmp'
];
我想要的是一种将所有域提取到单个数组(无引用)中的方法,或者是否有 DBI 函数 returns 没有任何引用的完整数据数组?我不想遍历所有数据或在 while 循环中执行 fetchrow_array
。如果可能,是否正在寻找一条语句来完成所有操作?
请看下面我的代码:
my @mysqldata = $dbh->selectall_array('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params);
my @minus = array_minus( @all, @mysqldata );
您可以像这样在一行中将 arrayrefs 解引用到一个大数组中:
my @all = map {@$_} $dbh->selectall_array($sql);
map
块将 @$_
应用于 selectall_array
返回的每一行,这取消了对数组引用的引用。
由于您只提取一列,因此您可以尝试 selectcol_arrayref()
方法 - 内联取消引用数组。
my @mysqldata = @{ $dbh->selectcol_arrayref('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params) };
更新
正如 ysth 在评论中所建议的那样,您可以在较新版本的 Perl(v5.20.0 及更高版本)中使用后缀运算符来取消引用 selectcol_arrayref()
返回的值 - 如下所示。
$dbh->selectcol_arrayref('SELECT domain FROM dfs', undef, @params)->@*;