使用:Perl v5.10.1,MySQL 5.5.15,DBI。
我需要通过电子邮件从数据库中提供最终用户输出。他们不希望这是一种依恋,而是在体内。
我想在ascii表中传递数据,并且在确定DBI是否内置函数来执行此操作时遇到问题(输出类似于从命令行查询MySQL)。
或者如果我可以确定最长的行字符长度,我可以用它来构建表。我有办法在数组中获取最大项长度,但我不能用查询结果来解决这个问题。
my $spacer_length = (reverse sort { $a <=> $b } map { length($_) } @array)[0];
答案 0 :(得分:5)
假设有一个通用的DBI循环,你可以这样做:
use List::Util qw(max);
...
my @output;
my $max;
while (my @foo = $dbi->fetchrow_array) {
$max = max($max // (), map length, @foo);
push @output, \@foo; # save data for email attachment
}
使用“已定义或”运算符//
可避免undef
警告,并在出现负值时可能受到污染。
答案 1 :(得分:0)
我不确定您要求的是什么,但如果您正在查找查询结果的给定列的“最大行字符长度”,则可以使用SQL执行此操作:
SELECT MAX(CHAR_LENGTH(col1)) FROM t1
或者如果您希望所有行按col1的值的长度排序:
SELECT col1,col2 from t1 ORDER BY CHAR_LENGTH(col1) DESC
您可以使用DBI执行这些查询:
# $mysql is your DBI connection info
my $query = $mysql->prepare("SELECT col1,col2 from t1 ORDER BY CHAR_LENGTH(col1) DESC");
$query->execute();
然后遍历结果行:
while ( my @result = $query->fetchrow_array ) {
my ($col1,$col2) = @result;
# do stuff with the values
}
您可以根据需要打印值,包括命令行mysql客户端的输出。