Select 或 Return "field" 名称来自 MySQL 中的查询(不是 table)
Select or Return "field" names from a query (not table) in MySQL
我在 MySQL 中有一个 Dynamic Pivot(参见这个问题:)
我想知道 Column/As/Field 的名字,就好像它是 table 一样,我查询了 INFORMATION_SCHEMA(如果这是一个真实的 table,就很容易了够了:MySQL query to get column names?).
但是,我找不到任何问题或对函数或 SELECT 选项的引用来从查询中获取 Column/As/Field 名称。这可能吗?如果是,怎么做?
使用 Perl 访问 MySQL (http://dbi.perl.org/)。
因此,翻转一下...我们知道固定列。因此,如果我们使用创建 Pivot 的相同基本查询开始,我们可以获得 GROUP_CONCAT 个名称。
SET @sql = NULL;
SELECT GROUP_CONCAT(qrv.req_name) INTO @sql
FROM (SELECT qrt.req_name FROM qual_requirment_values qrv JOIN qual_requirment_types qrt ON qrt.id = qrv.req_type_id) qrv;
SET @sql = CONCAT('r.rank,r.member_type,im.name,qrv.grouping,', @sql);
SELECT @sql;
然后可以拆分成数组使用。
似乎还有很长的路要走,但在没有其他东西的情况下它适用于我的应用程序。看起来非常低效! :)
更好的答案,感谢@OllieJones。用于访问的数据库接口 MySQL 应该提供一种方法。
就我而言 (Perl),答案在这里:http://www.perlmonks.org/?node_id=264623
my $sql = ... [some query];
my $sth = $dbh->prepare($sql);
$sth->execute();
my $field_name_arrayref = $sth->{NAME};
除了答案之外,这是我的 MySQL 包中的完整方法。 do() 是我们在 AoA 中 returns 查询的通用 DBI 方法。调整该方法以创建 do_fieldNames();
## Tested Method
sub do_fieldNames {
my ($self, $sql, $has_results) = @_;
my ($sth, $rv, @row, @query_results);
## Execute the SQL statement
$sth = $$self->prepare($sql);
$rv = $sth->execute or &error(3306, __LINE__, __FILE__, $sql, $$self->errstr);
return undef unless $rv > 0;
## SOLUTION >> Field Name arrayref, part of the standard included DBI Perl Module
my $field_name_arrayref = $sth->{NAME};
## Parse the results
if ($has_results || $sql =~ /^select/i) {
while (@row = $sth->fetchrow_array) {
push @query_results, [ @row ];
}
}
## Return results
return (\@query_results, $field_name_arrayref) ;
}
我在 MySQL 中有一个 Dynamic Pivot(参见这个问题:
我想知道 Column/As/Field 的名字,就好像它是 table 一样,我查询了 INFORMATION_SCHEMA(如果这是一个真实的 table,就很容易了够了:MySQL query to get column names?).
但是,我找不到任何问题或对函数或 SELECT 选项的引用来从查询中获取 Column/As/Field 名称。这可能吗?如果是,怎么做?
使用 Perl 访问 MySQL (http://dbi.perl.org/)。
因此,翻转一下...我们知道固定列。因此,如果我们使用创建 Pivot 的相同基本查询开始,我们可以获得 GROUP_CONCAT 个名称。
SET @sql = NULL;
SELECT GROUP_CONCAT(qrv.req_name) INTO @sql
FROM (SELECT qrt.req_name FROM qual_requirment_values qrv JOIN qual_requirment_types qrt ON qrt.id = qrv.req_type_id) qrv;
SET @sql = CONCAT('r.rank,r.member_type,im.name,qrv.grouping,', @sql);
SELECT @sql;
然后可以拆分成数组使用。
似乎还有很长的路要走,但在没有其他东西的情况下它适用于我的应用程序。看起来非常低效! :)
更好的答案,感谢@OllieJones。用于访问的数据库接口 MySQL 应该提供一种方法。
就我而言 (Perl),答案在这里:http://www.perlmonks.org/?node_id=264623
my $sql = ... [some query];
my $sth = $dbh->prepare($sql);
$sth->execute();
my $field_name_arrayref = $sth->{NAME};
除了答案之外,这是我的 MySQL 包中的完整方法。 do() 是我们在 AoA 中 returns 查询的通用 DBI 方法。调整该方法以创建 do_fieldNames();
## Tested Method
sub do_fieldNames {
my ($self, $sql, $has_results) = @_;
my ($sth, $rv, @row, @query_results);
## Execute the SQL statement
$sth = $$self->prepare($sql);
$rv = $sth->execute or &error(3306, __LINE__, __FILE__, $sql, $$self->errstr);
return undef unless $rv > 0;
## SOLUTION >> Field Name arrayref, part of the standard included DBI Perl Module
my $field_name_arrayref = $sth->{NAME};
## Parse the results
if ($has_results || $sql =~ /^select/i) {
while (@row = $sth->fetchrow_array) {
push @query_results, [ @row ];
}
}
## Return results
return (\@query_results, $field_name_arrayref) ;
}