1

使用:Perl v5.10.1、MySQL 5.5.15、DBI。

我需要通过电子邮件从数据库中提供最终用户的输出。他们不希望这是一种依恋,而是在身体中。

我想在 ascii 表中提供数据,并且在确定 DBI 是否具有执行此操作的内置函数时遇到问题(输出类似于从命令行查询 MySQL)。

或者,如果我可以确定最长的行字符长度,我可以使用它来构建表格。我有一种方法可以获取数组中的最大项目长度,但是我无法用查询结果来解决这个问题。

my $spacer_length = (reverse sort { $a <=> $b } map { length($_) } @array)[0];
4

2 回答 2

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在负值的情况下发出警告和可能的污染。

于 2012-10-01T19:35:19.797 回答
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 客户端的输出。

于 2012-10-01T21:16:27.987 回答