Perl selectall_array - получить все данные из массива ref.
Я использую DBI
selectall_array
извлечь все данные из mysql. Мой запрос возвращает 1 столбец для каждой строки. Но selectall_array
функция возвращает массив ref для каждой строки, как указано ниже
$VAR1 = [
'1.ptmp'
];
$VAR2 = [
'e1.ptmp'
];
$VAR3 = [
's2.ptmp'
];
$VAR4 = [
'sw1.ptmp'
];
$VAR5 = [
'w1.ptmp'
];
Что я хотел бы, это способ извлечь все домены в один массив (без ссылок) или есть функция DBI, которая возвращает полный массив данных без каких-либо ссылок? Я не хочу перебирать все данные или делать 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 );
2 ответа
Вы можете разыменовать arrayrefs в один большой массив в одной строке следующим образом:
my @all = map {@$_} $dbh->selectall_array($sql);
map
блок применяется @$_
к каждой строке, возвращаемой selectall_array
, который разыменовывает arrayref.
Поскольку вы извлекаете только один столбец, вы можете попробовать selectcol_arrayref()
Метод - разыменование массива в строке.
my @mysqldata = @{ $dbh->selectcol_arrayref('SELECT `domain` FROM dfs WHERE `id` IN ('.join(',',('?')x(scalar(@params))).')', {}, @params) };
ОБНОВИТЬ
Как подсказывает ysth в комментариях, вы можете использовать оператор postfix в более новых версиях Perl (v5.20.0 и новее) для разыменования значения, возвращаемого selectcol_arrayref()
- как в следующем.
$dbh->selectcol_arrayref('SELECT domain FROM dfs', undef, @params)->@*;